不安全的JavaScript尝试使用URL访问框架(同一个域!)

时间:2012-05-09 12:33:58

标签: javascript jquery security

从页面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进行测试。

1 个答案:

答案 0 :(得分:5)

file:///网址与适用于托管内容的正常same origin policy略有不同的javascript安全策略。为了阻止已保存的网页能够读取磁盘的全部内容,不同的文件被视为不同的来源。只需启动本地服务器并在其上托管您的内容;您将回归到“标准”策略,其中起源由domain / ip定义。

如果由于某种原因你无法运行网络服务器,你可能会获得一些里程数 命令行开关:--allow-file-access-from-files。我相信这会影响所有file:///网址被定义为属于同一个来源。