重新加载iframe src/location,新的url在Safari中不起作用

Mat*_*att 8 javascript safari iframe

我有一个页面加载最初只是iframe中的一个表单,如下所示:

<iframe id="oIframe" ...src='somePage>' <form ... /> </iframe>

当您单击表单中的按钮时,会调用一些构建URL的javascript,然后我想执行以下操作:

frame.src = 'somePage?listId=1';

这在IE中用于"重新加载"具有新内容的帧.但是,在Safari中这不起作用.

我有jQuery可用,但我不想替换现有的iframe,因为它附加了事件.我也无法修改iframe的id,因为它在整个应用程序中被引用.

我已经看到了一些类似的问题,但没有解决方案似乎适合我的确切问题.

任何人都可以提供的任何帮助都会很棒!

Dub*_*bas 7

某些浏览器在直接从javascript层次结构调用javascript对象时不使用"src",而其他浏览器使用"location"或"href"而不是"src"来更改url.您应该尝试使用这两种方法来使用新网址更新iframe.

为了防止浏览器缓存,将一个伪随机字符串(如数字和时间戳)添加到URL以防止缓存.例如,将"new Date().getTime()"添加到您的网址.

一些调用示例:

document.getElementById(iframeId).src = url;
Run Code Online (Sandbox Code Playgroud)

要么

window.frames[iframeName].location = url;  
Run Code Online (Sandbox Code Playgroud)

我建议使用document.getElementById的第一个选项

您也可以强制使用iframe重新加载页面

document.getElementById(iframeId).reload(true);
Run Code Online (Sandbox Code Playgroud)


Bar*_*ski 5

所以答案很简单:
1.<div id="container"> </div>在你的页面上放置
2.当需要重新加载时使用以下jQuery:

$("#container").empty();
$("#container").append("<iframe src='" + url + "' />");
Run Code Online (Sandbox Code Playgroud)

就是这样.当然,有更优雅的方式使用jQuery创建DOM,但这提供了"刷新"iframe的想法.适用于FF18,CH24,IE9,O12(这是它的jQuery所以它几乎总是可以工作:)


Mat*_*att 3

我使用 jQuery.ajax 找到了一个更好的解决方案(尽管不是特别雄辩):

jQuery.ajax({
   type: 'GET',
   url: "/somePage?someparms",
   success: function() {
      frameObj.src = "/somePage?someparms";
   }
});
Run Code Online (Sandbox Code Playgroud)

这会强制在框架对象内读取 DOM,并在服务器准备好响应时重新加载它。