Javascript 检测使用window.open打开的窗口的重载事件
这在我用IE、Firefox和Chrome试用过的任何浏览器中都不起作用。如何在窗口中像iframe onload一样加载页面Javascript 检测使用window.open打开的窗口的重载事件,javascript,internet-explorer,firefox,google-chrome,popup,Javascript,Internet Explorer,Firefox,Google Chrome,Popup,这在我用IE、Firefox和Chrome试用过的任何浏览器中都不起作用。如何在窗口中像iframe onload一样加载页面 window.popup = window.open($(this).attr('href'), 'Ad', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); $(window.popup).onload = function() { alert
window.popup = window.open($(this).attr('href'), 'Ad', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0');
$(window.popup).onload = function()
{
alert("Popup has loaded a page");
};
如果您关心IE,请使用以下内容作为第二行:
var myPopup = window.open(...);
myPopup.addEventListener('load', myFunction, false);
正如你所看到的,支持IE是相当麻烦的,如果可能的话应该避免。我的意思是,如果你因为你的受众而需要支持IE,那么一定要这样做。onload事件处理程序必须在popup的HTML标记中。如果popup的文档来自不同的域,这是不可能的 2015年4月更新:我错了:如果你拥有这两个域名,那么这两个域名在今天都是相关的 如果没有,如果没有加载到弹出窗口中的文档的帮助,您仍然无法跨浏览器执行此操作。您需要能够在加载后检测弹出窗口中发生的更改,这可能是JavaScript在处理自己的加载事件时在弹出页面中设置的一个变量,或者如果您对它有一些控制权,您可以在opener中添加对函数的调用。如中所述,以下解决方案是理想的: /*Internet Explorer将在这两条语句中的一条上抛出错误,Firefox将在这两条语句中的另一条上抛出错误*/ 函数{ ow.addEventListenerload,函数{alertloaded;},false; ow.AttachEventLoad,函数{alertloaded;},false; }window.openprompt您今天要去哪里?、location.href、snapDown; 如下文所述,其他评论和回答造成了一些错误的误解 下面的脚本演示了定义onload的易变性。将脚本应用于正在打开的窗口的快速加载位置,例如带有file:scheme的位置,并将其与慢速位置进行比较,以查看问题:通过重新加载加载的页面,可以看到onload消息或根本看不到所有3种变体。还假定正在加载的页面本身没有定义会加剧问题的onload事件 onload定义显然不在弹出文档标记中: var popup=window.openlocation.href,快照; popup.onload=函数{alertmessage one;}; alertmessage 1可能太快\n+popup.onload; popup.onload=函数{alertmessage two;}; alertmessage 2可能太晚了\n+popup.onload; 您可以做什么: 打开带有外部URL的窗口 在该窗口的地址栏上输入一个javascript:URI——代码将以与外部URL的域相同的权限运行 如果在地址栏中键入javascript:URI无效,则可能需要为其添加书签。2012年左右发布的一些浏览器可能就是这种情况 因此,任何页面,几乎不考虑来源,都可以修改如下: ifconfirmwipe删除链接和锚?\n+document.body.innerHTML voiddocument.body.innerHTML=document.body.innerHTML.replace/
这对我来说是个好办法;完整示例: HTML:
核心问题似乎是您正在打开一个窗口以显示其内容已缓存在浏览器中的页面。因此,不会发生加载,也不会发生加载事件 一种可能是使用“pageshow”-事件,如中所述: 首先,当加载第一个初始窗口时,它会被缓存。因此,当从第一个窗口创建新窗口时,新窗口的内容不是从服务器加载的,而是从缓存加载的。因此,创建新窗口时不会发生onload事件 但是,在这种情况下,会发生onpageshow事件。它总是发生在onload事件之后,甚至是从缓存加载页面时。此外,现在所有主流浏览器都支持它
(function(){
var doc = document;
jQuery('.import').click(function(e){
e.preventDefault();
window.popup = window.open(jQuery(this).attr('href'), 'importwindow', 'width=500, height=200, top=100, left=200, toolbar=1');
window.popup.onload = function() {
window.popup.onbeforeunload = function(){
doc.location.reload(true); //will refresh page after popup close
}
}
});
})();
报告对此进行了详细阐述:
onpageshow事件与onload事件类似,只是它发生在页面首次加载时的onload事件之后。此外,每次加载页面时都会发生onpageshow事件,而从缓存加载页面时不会发生onload事件
我猜你的某处已经有了onLoad?假设我无法控制弹出窗口中打开的页面,你想用$onLoad做什么?只有窗口、弹出窗口、加载窗口有什么问题?^实际上,这可能就是问题所在。。编辑:是的。这解决了它,但不适用于跨域。无论如何,我可以跨域完成这个任务?不幸的是不能。出于安全原因,浏览器禁用跨不同域的JavaScript对象交互。然后只使用第三个条件。我会加上它。+1蒂姆,这在IE中不起作用;蒂姆的回答是正确的。我花了数小时寻找解决方案,这是唯一对我有效的方法。需要注意的一点是,Firefox似乎在完全加载页面之前打开了打印对话框。这将导致打印空白页。我通过检测浏览器来解决这个问题,然后在需要时使用onload事件。这可能不太可能
他是最好的方法,但对我来说很有效。下面是我的代码:一种简单的方法来检查它,以在setTimeout调用中监视另一个页面中JS函数的可用性。根据本文,这是可能的,但您必须同时拥有这两个域。newWindow.addEventListener'load',=>console.log'hi',false;这个答案中有很多句子,它们说一件事,然后接着是另一个句子,纠正了前面的错误。这使得它很难遵循。这里有很好的信息,只是很难看到。如果你说得更清楚,你会得到更多的选票。而且,如果这个问题被另一个问题回答,也许值得将其标记为另一个问题的副本,并在评论中将提问者引向另一个问题。引用的答案是指向该问题已发布答案的直接共享链接-最好。。。完成了。。。投票本身不是一个问题-混淆?希望没有什么是直接矛盾的-犯下的错误观念指的是以前关于x站点脚本和原创策略的评论和答案,希望不是这个答案希望通过运行函数代码示例的经验证据,能够更简洁、更准确地对本文进行限定和验证-噢!O pen W indow或应该是functionouch,这是第一个示例中未处理错误条件的双关语!这篇散文很有针对性,如果写它会受伤,那么读它。。。!你的写作风格很难理解。我试图弄清这个答案的意思时,脑子很痛。简洁不是坏事。应该说,只有当两个域都相同时,这才有效。这是我触发它的唯一方法,尝试了几乎所有其他可能的方法-谢谢$找到“body.attr'onload”,“window.print;”;他终于成功了。
<a href="/my-popup.php" class="import">Click for my popup on same domain</a>
(function(){
var doc = document;
jQuery('.import').click(function(e){
e.preventDefault();
window.popup = window.open(jQuery(this).attr('href'), 'importwindow', 'width=500, height=200, top=100, left=200, toolbar=1');
window.popup.onload = function() {
window.popup.onbeforeunload = function(){
doc.location.reload(true); //will refresh page after popup close
}
}
});
})();
window.popup = window.open($(this).attr('href'), 'Ad', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0');
$(window.popup).onpageshow = function() {
alert("Popup has loaded a page");
};