我想制作一个关于HTML/JS 同源政策的社区维基,希望能帮助任何人搜索这个主题.这是SO上搜索次数最多的主题之一,没有统一的wiki,所以我去:)
相同的源策略可防止从一个源加载的文档或脚本从另一个源获取或设置文档的属性.此政策可以追溯到Netscape Navigator 2.0.
请保持示例详细,最好还链接您的来源.
Orbited(Comet服务器)的客户端JS组件要求,如果服务器在与JS本身不同的域或端口上运行,则必须执行
document.domain = document.domain;
Run Code Online (Sandbox Code Playgroud)
在加载任何其他JS之前.(参见文档.)
这是做什么的?它看起来像一个NOOP!(我已经检查过了,事实上这是必要的.)
在服务器上,有一个文本文件.在客户端上使用JavaScript,我希望能够读取此文件并进行处理.无法更改服务器上文件的格式.
如何将文件的内容转换为JavaScript变量,以便进行此处理?文件的大小最大可达3.5 MB,但它可以很容易地处理成100行(1行是50-100个字符串).
该文件的所有内容都不应对用户可见; 他将看到文件中数据处理的结果.
我在我的页面上设置了一个iframe,并使用下面的脚本来删除双导航栏.它适用于任何浏览器,但不适用于Chrome,它显示双垂直导航栏!
function calcHeight() {
//find the height of the internal page
var the_height = document.getElementById('the_iframe').contentWindow.
document.body.scrollHeight;
//change the height of the iframe
document.getElementById('the_iframe').height = (the_height + 30) +"px";
}
Run Code Online (Sandbox Code Playgroud)
我在Chrome中收到2条错误消息:
第一条错误消息:
未捕获的SecurityError:阻止具有原点"null"的帧访问具有原点"null"的帧.协议,域和端口必须匹配.
并指出错误:
var the_height = document.getElementById('the_iframe').contentWindow.
document.body.scrollHeight;
Run Code Online (Sandbox Code Playgroud)第二条错误消息,它位于jquery-1.10.2.js中:
Uncaught SecurityError:无法从'HTMLIFrameElement'读取'contentDocument'属性:阻止具有原点"null"的帧访问具有原点"null"的帧.协议,域和端口必须匹配.
它指出了以下错误消息:
elem.contentDocument || elem.contentWindow.document :
Run Code Online (Sandbox Code Playgroud)我一直在关注使用Javascript访问SVG元素的示例,但我无法让它工作.这段代码有什么问题?
使用Javascript:
var objTag = document.getElementById('esc-seconds-1s');
objTag.addEventListener('load', function() {
var svgDoc = objTag.contentDocument;
var cc3 = svgDoc.getElementById('cc3');
cc3.setAttribute('fill', 'red');
}, false);
Run Code Online (Sandbox Code Playgroud)
我收到以下控制台错误:
Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement': Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.
Run Code Online (Sandbox Code Playgroud)
我认为这个错误有点失误.错误来自contentDocument行,所以我认为这不是因为相同的原始策略.另外,我在SVG文件中没有任何xlink行.这是我的SVG的顶部:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
Run Code Online (Sandbox Code Playgroud)
SVG显示正常,为什么objTag.contentDocument调用失败?
html:
<object class="esc-seven-segment" id="esc-seconds-1s"
type="image/svg+xml" data="images/seven-segment-digit.svg"></object>
Run Code Online (Sandbox Code Playgroud)
谢谢,
-Andres