相关疑难解决方法(0)

如何在iFrame中访问DOM元素

我正在编写一个jQuery插件,需要能够在iFrame中针对DOM元素运行.我现在正在本地测试这个(即url是file://.../example.html),在Chrome中我一直在点击"SecurityError:无法从'HTMLIFrameElement'读取'contentDocument'属性:阻止了一个框架原点"null"来访问跨域框架." 在Safari中我只得到一个空文档.

鉴于父文件和iFrame的文件都来自我的本地磁盘(在开发中)并且将从相同的服务器(生产中)下来,我认为我不会受到跨源问题的影响.

有没有办法可以说服浏览器我的本地文件实际上是同一个域?

<旁边> 有趣的是在Safari中,直接使用控制台,我可以输入$("iframe").get(0).contentDocument.find("ol"),并愉快地找到我的列表.在Chrome中,同一行会抛出安全错误,就像它正在执行一样.</一旁>

更新

基于下面的建议,我已经启动了一个简单的本地Web服务器来测试这个,现在我没有得到跨源错误 - yay - 但我也没有得到任何内容.

我的Javascript看起来像

$(document).ready(function(){
  var myFrame = $("iframe"),
      myDocument = $(myFrame.get(0).contentDocument),
      myElements;
  myDocument.ready(function(){
    myElements = myDocument.find("ul, ol");
    console.debug("success - iFrame", myFrame, "document", myDocument, "elements", myElements);
  });
});
Run Code Online (Sandbox Code Playgroud)

myDocument.ready是那里只是为了确保iframe的文件准备-在现实中它没有什么区别.

我总是以myElements空虚为结局.([]在safari或jQuery.fn.init[0]Chrome中)

但是,如果我手动将其键入控制台:

$($("iframe").get(0).contentDocument).find("ol, ul")
Run Code Online (Sandbox Code Playgroud)

我按预期得到了我的清单.Safari和Chrome现在都是这种情况.

所以我的问题变成了:为什么我的脚本不能看到DOM元素,但是当直接输入浏览器的控制台时,相同的代码可以很高兴地看到DOM元素?

javascript iframe cross-domain

19
推荐指数
1
解决办法
5万
查看次数

标签 统计

cross-domain ×1

iframe ×1

javascript ×1