【问题标题】:unwanted page reload when dynamicly adding iframe动态添加 iframe 时不需要的页面重新加载
【发布时间】:2013-03-09 10:00:16
【问题描述】:

看起来这是一个 Firefox Home 严格的问题,并且由于 Mozzilla 放弃了对它的支持并在 iStore 中将其撤出,我想尝试解决方法 (http://thenextweb.com/apps/2012/08/31/mozilla-retires-firefox-home-ios-releases-source-code-github/) 没有意义,反正我已经如果有人有兴趣关注/解决问题,请向他们发布错误 (https://bugzilla.mozilla.org/show_bug.cgi?id=853377)


我有一个相当不错的跨浏览库,使用 iframe 方法进行通信。

它运行良好,直到 .. 在 iPhone 上用 Firefox 打开。带有库的页面开始,然后神奇地被重定向。

好吧,我已经进入代码并尝试找出问题:

动态添加 iframe 父重新加载到 iframe src 后。我已经测试了以下内容:

  1. document.createElement('iframe') 附加到文档
  2. document.createElement('iframe') 附加到预先创建的 div
  3. .innerHTML 方法,其中包含预先创建的 iframe 代码
  4. frames['iframe_name'].location.src 带有空 src 的预创建 iframe
  5. .location.assign()
    • document.getElementById()fails
    • frames['iframe_name'] 重定向
  6. 与 jquery 相同 $('<iframe src="link"/>'). appendTo('#reportA');
  7. 也试过先创建不带src的iframe然后设置
  8. 还更新为$('#iframe').attr('src','link') 导致重定向

此外,我在日志中看到(iframe 中称为页面是日志状态)。 实际上有两个调用,所以看起来首先附加的 iframe 读入,然后在新页面中打开 iframe src。

在剖析我的代码时,我发现在部分代码中创建 iframe 时会出现问题,这是由我的 js 加载程序动态添加的。我使用了以下附加脚本

var head = document.getElementsByTagName("head")[0];  
var script = null;  
script = document.createElement('script');  
script.type = 'text/javascript';  
var tag = Math.round(new Date().getTime() / 1000);  
script.src =  GLOBAL_VARIABLE_WITH_PATH_TO_URL+'jsc/include.js?'+tag ;  
head.appendChild(script);

也试过

 document.write("<script src='"+FUTUREclickINFOpathS+"fcijsc/fci-include.js?"+tag+"'><\/script>");

更新

还尝试在 jquery $(document).ready() 上附加 iram - 当与 document.write 方法一起使用时,它工作正常,直到在 setTimeout 中调用附加

更奇怪的是,当在主静态 js 文件中使用 setTimeout() 时,会发生同样的事情。我今天试试setInterval() 看看会发生什么。

因此,很明显 iframe 的 src 上的任何更改都会导致父级重新加载,即使 iframe 是预先创建的。任何想法为什么?

ps。抱歉有些不全面的句子,但我对这个问题很感兴趣

【问题讨论】:

  • 只是一个想法,但是您是否尝试过使用 .location.assign(string url) 更改 url / src
  • 所以您是说当您尝试更改 iframe 上的 src 属性时,父页面会重新加载?如果您保持所有脚本不变并且只注释掉 iframe src 更改的行,那么一切正常(当然除了 iframe)?
  • 使用预先创建的 iframe,但将初始 src 属性设置为实际页面,即。 www.yourdomain.tld/blank.htm 然后当你用 $('#premadeIframeID').attr('src', newURL);应该没问题。
  • 克里斯:是的,evetyrhing 工作正常,直到 iframe appaeding - 我已经评论了几乎所有的库,只留下了 elf 诊断功能,10 秒后触发,看是过程。它在domainA上运行,如果发现问题,将iframe附加到domainB,err_code在url中传递
  • Lastcoder - 不能这样做,我在客户端域上运行,我不允许预先创建任何东西。但我会尝试使用 jQuery 更改 src。

标签: javascript iphone firefox iframe reload


【解决方案1】:

您是否使用postMessage 从 iframe 与父级通信?我遇到了这个问题,并注意到从 iframe 的脚本中删除 parent.postMessage 修复了它。如果我找到了解决这个问题的方法,我会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2021-05-15
    • 2010-12-24
    • 2021-07-19
    • 2014-10-03
    • 2012-08-03
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多