不安全的JavaScript尝试与URL访问帧(同一个域!)(Unsafe JavaScript a

2019-10-31 16:39发布

从页面file://localhost/Users/pistacchio/dev/epress/catflow/test_html/index.html我有以下的(CoffeeScript的)代码试图访问一个iframe:

$('#ipad-viewport iframe').bind 'load', () ->
    console.log $(this).contents().find('map')

(这相当于下面的JavaScript,但我不认为这个问题依靠这里):

(function() {

  $('#ipad-viewport iframe').bind('load', function() {
    return console.log($(this).contents().find('map'));
  });

}).call(this);

我等待加载的iframe页面,并尝试它的身体内访问的元素。 我得到以下错误:

Unsafe JavaScript attempt to access frame with URL file://localhost/Users/pistacchio/dev/epress/catflow/test_html/catalogo/catalog/intro.html from frame with URL file://localhost/Users/pistacchio/dev/epress/catflow/test_html/index.html. Domains, protocols and ports must match.

现在,由于iframe的定义是这样的:

<iframe src="file://localhost/Users/pistacchio/dev/epress/catflow/test_html/catalogo/catalog/intro.html" width="1024" height="768"></iframe>

不是我的页面都在同一个域中的iframe,或file://localhost ? 为什么我遇到了这个问题?

哦,如果相关的,我使用Chrome 18测试此。

Answer 1:

file:///的URL都受到了稍微不同的JavaScript安全政策到正常same origin policy适用于托管的内容。 为了从能够读取磁盘的全部内容停止保存网页,不同的文件被视为不同的来源。 刚刚火起来的本地服务器和主机上的内容; 你将回退到哪里起源由域名/ IP协议规定了“标准”的政策。

如果由于某种原因,你不能运行一个Web服务器,你可能会得到一些里程出来的命令行开关: --allow-file-access-from-files 。 我相信这有使所有的影响file:///的URL被定义为属于同一来源。



文章来源: Unsafe JavaScript attempt to access frame with URL (same domain!)