0

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

4

1 回答 1

5

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

如果由于某种原因您无法运行 Web 服务器,您可能会从命令行开关中获得一些好处:--allow-file-access-from-files. 我相信这会影响将所有file:///URL 定义为属于同一来源。

于 2012-05-09T12:47:08.787 回答