我有一个页面,最初只是在iframe中加载一个表单,如下所示:
<iframe id="oIframe" ...src='somePage>'
<form ... />
</iframe>
当您单击表单中的某个按钮时,会调用一些构建网址的javascript,然后我想执行以下操作:
frame.src = 'somePage?listId=1';
这在IE中用于“重新加载”具有新内容的帧。 但是,在Safari中,这不起作用。
我有jQuery可用,但我不想替换现有的iframe,因为附加了事件。我也无法修改iframe的id,因为它在整个应用程序中被引用。
我已经看到了一些类似的问题,但似乎没有解决方案似乎适用于我的确切问题。
任何人都可以提供任何帮助都很棒!
答案 0 :(得分:5)
某些浏览器在直接从javascript层次结构调用javascript对象时不使用“src”,而其他浏览器使用“location”或“href”而不是“src”来更改url。您应该尝试使用这两种方法来使用新网址更新iframe。
要防止浏览器缓存,请向网址添加数字和时间戳等伪随机字符串,以防止缓存。例如,将“new Date()。getTime()”添加到您的网址。
一些调用示例:
document.getElementById(iframeId).src = url;
或
window.frames[iframeName].location = url;
我推荐使用document.getElementById
的第一个选项您也可以使用
强制iframe重新加载页面document.getElementById(iframeId).reload(true);
答案 1 :(得分:5)
所以答案很简单:
1.在页面上放置<div id="container"> </div>
2.当需要重新加载时使用jQuery:
$("#container").empty();
$("#container").append("<iframe src='" + url + "' />");
就是这样。 当然,有更优雅的方式使用jQuery创建DOM,但这提供了“刷新”iframe的想法。 适用于FF18,CH24,IE9,O12(它的jQuery,所以它几乎总是可以工作:)
答案 2 :(得分:3)
我使用jQuery.ajax找到了一个更好的解决方案(虽然不是特别雄辩):
jQuery.ajax({
type: 'GET',
url: "/somePage?someparms",
success: function() {
frameObj.src = "/somePage?someparms";
}
});
这会强制在框架对象中读取DOM,并在服务器准备好响应后重新加载它。
答案 3 :(得分:0)
试试这个
form.setAttribute('src', 'somePage?listId=1');
答案 4 :(得分:0)
好吧,我能够找到一个看似可行的解决方案 - 这是一项正在进行中的工作,但这基本上就是我最终要做的事情:
var myFrame = document.getElementById('frame'); // get frame
myFrame.src = url; // set src attribute of original frame
var originalId = myFrame.id; // retain the original id of the frame
var newFrameId = myFrame.id + new Date().getTime(); // create a new id
var newFrame = "<iframe id=\"" + newFrameId + "\"/>"; // iframe string w/ new id
myFrameParent = myFrame.parentElement; // find parent of original iframe
myFrameParent.innerHTML = newFrame; // update innerHTML of parent
document.getElementById(newFrameId).id = originalId; // change id back
答案 5 :(得分:0)
我使用React遇到了这个问题,因为key
解决了问题时传递了props.src
const KeyedIframe = ({children, ...props}) => <iframe key={props.src} { ...props}>
{children}
</iframe>