我正在编写一个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元素?