我有一些JavaScript代码可以动态地在给定的HTML页面中注入iframe。不幸的是,在Firefox中,只在Firefox中,虽然iframe是不时创建的,但相关的URL并没有加载到它中。
我知道它没有加载,因为相关的URL没有出现在Firebug Net标签中,当我检查iframe时,我没有看到任何预期的HTML代码(当iframe位于同一个域时)作为边远页面)。我也没有看到任何JavaScript或网络错误。
这是一段代码片段,我检查了所有相关变量是否正确:
var iframe = document.createElement("iframe");
iframe.width = options["w"];
iframe.height = options["h"];
iframe.scrolling = "no";
iframe.marginWidth = 0;
iframe.marginHeight = 0;
iframe.frameBorder = 0;
iframe.style.borderWidth = 0;
if (node.childNodes.length > 0)
node.insertBefore(iframe, node.childNodes[0]);
else
node.appendChild(iframe);
iframe.contentWindow.location = iframeSrc + "?" + querystring;
这是为iframe设置的示例网址(当网址指向外部服务器时,问题也会重新创建,必须在开头省略'http://',否则我无法发布问题):
127.0.0.1:8000/widget/iframe/index.html?style=slide-top-to-bottom&culture_code=en_us&c=26&sc=1324&title=Top%20News&caption=Top%20Stories&order=relevance&count=20&w=250&h=300×tamp=true&scrollbar=false&theme=ui-lightness&className=8815455464592103&referrer=http%3A%2F%2F127.0.0.1%3A8000%2Fwidget%2Fbuilder%2Findex.html
在网上做一些研究,我发现这个未修复的Firefox bug似乎与此问题有关: https://bugzilla.mozilla.org/show_bug.cgi?id=279048
阅读完bug后,我尝试了几种解决方案,但都没有解决问题:
有没有人为这个烦人的Firefox bug找到解决方法?或者我描述的问题与错误无关并且有不同的解决方案?
答案 0 :(得分:5)
如果将其添加到脚本底部会发生什么?
iframe.contentWindow.location.reload(true);
也许它会停止在FF中重新加载的需要。
修正了示例
答案 1 :(得分:1)
解决了这个问题,我在找错了地方。加载此动态iframe的HTML文件具有从DOM中删除的空iframe标记,之后会注入动态iframe。
显然,Firefox缓存了此iframe的最后一个URL,并在加载外部页面时立即加载它。我知道,因为我看到相关的HTML文件在Firebug Net选项卡中加载了两次,而不是在注入时加载一次。
在我摆脱了这个空的iframe标签并且只依赖于注入的iframe之后,一切都开始运作良好,问题不再重现了。我猜Firefox不喜欢处理这种情况,可能会出现某种错误吗?
非常感谢你帮助我,它给了我正确解决方案的灵感:)