我有一个链接,使用window.open打开一个新窗口。弹出窗口工作正常,但普通网页停止加载对象(图像,脚本,ajax脚本),有时页面根本不加载。
这是我的代码:
MyWindow=window.open('player.php','Player','width=500','height=300'); return false;
我有什么问题吗?
谢谢, 彼得
答案 0 :(得分:2)
首先,请更具体一点:告诉我们您的浏览器以及哪个版本以及可能的操作系统的更多信息。它可能与浏览器相关,而不是与Web内容相关。
然后讨论可能的问题;你首先说“我有一个链接......”。
听起来像你使用<a href="javascript:DoSomething()">
。或许<a href="#" onclick="DoSomething()">
。
我在一些现代浏览器中都试过了:Chrome v37,IE v11。两种浏览器都没有产生你所描述的内容:
- Chrome v37将很乐意继续加载,即使我立即点击“window.open()” - 链接在(巨大的)网页上;
- IE v11将显示“false”,这很奇怪,但仍然不是你得到的
在某些情况下,我还要处理弹出窗口阻止程序。
一般提示可能是不使用<a href>
这样的事情。浏览器中的行为似乎不一致,现在还有更好的选择,例如<span onclick="">...</span>
和<button onclick="">...<button>
,或者使用JQuery或其他框架(我不太了解)。
虽然这很多都不是一个确凿的答案,但也许这可以帮助你自己进行实验,并考虑可能的原因或其他做事方式。
答案 1 :(得分:1)
您描述的行为绝对不应该发生。这是由robbmj的JSFiddle确认的,无法重现问题。这证明主页中正在发生某些事情不普通的页面加载,或者您的“链接开放”有一些不寻常的东西。 除了语法错误(使用四个参数,而不是三个)。
由于您没有提供有关这两点的信息(如何加载主页?如何触发弹出式代码?),我们甚至不知道问题是否存在 可能与浏览器有关;我开始尝试在IE,Chrome和Mozilla中测试一下 是否有变化;这可能会提供一些有用的见解。
非常强烈的可能性是你的无意的第四个参数进入window.open()
“替换”参数,这是一个布尔值,并触发未定义的行为或只是一个停止所有的错误。你应该在IE中有些工作,而不是在Firefox中工作。
您还应该能够通过使用Firefox和Firebug扩展程序或Chrome中的Web Developer Console来查看是否属于这种情况。
更深奥的可能性是,您定义链接的方式可能使浏览器相信您实际上已转移到另一个页面,因此继续加载当前页面毫无意义。根据浏览器的不同,这可能与链接的定义方式有关,可以通过其他方式定义链接来解决。
例如,如果你有
,可能会发生这种情况<a href="javascript:openPopup();">...</a>
我怀疑这是导致用户Tomzan问的问题,“链接类似于javascript:
......?”
因此,如果是这种情况,请尝试使用此功能(这适用于IE9 / Chrome / FF):
<a href="#" onclick="return openPopup();">link</a>
function openPopup() {
MyWindow = window.open('player.php', 'Player', 'width=500, height=300');
// Also try the following. You won't probably like the results (it should send the
// popup window behind), but if it works, it proves we're dealing with a browser
// issue there.
// Blur and refocus
// MyWindow.blur();
// window.focus();
// Just focus
// window.focus();
return false;
}
一个可能接受的解决方法可能是完全禁用链接(或通过CSS隐藏它),并且只在主文档准备就绪时重新激活/显示它。即使由于等待时间较长而导致用户体验稍差,这也可以解决问题。
但是,如果用户在等待整个页面加载之前点击链接的可能性很大,我还会考虑不自动加载页面的其余部分,并重新组织信息提供更简化的导航。或者可以在两个连续的页面上分发它。再一次,遗憾的是,你没有提供足够的信息来做更多的猜测。
答案 2 :(得分:-1)
您可能知道,JavaScript是single threaded。每个事件都排队,直到有空闲时间执行。
在window.open
的情况下,两个窗口必须共享一个上下文以保持其线程安全,因为打开的窗口可以使用window.opener
访问它的父级。
我不知道浏览器如何实现它,但我们可以猜出两种可能性:
两个窗口中只有一个可以处于活动状态,具体取决于哪个窗口具有焦点。在这种情况下,当您使用弹出窗口时,可能会在主窗口中暂停所有事件。
如果您想要更精确的答案,我需要有关您的代码的更多详细信息。
答案 3 :(得分:-1)
document.addEventListener("DOMContentLoaded", function () {
//whatever the code
MyWindow=window.open('player.php','Player','width=500','height=300'); return false;
}, false);
答案 4 :(得分:-2)
尝试将代码包装在SetTimeout
中setTimeout(function () {
window.open( .. )
}, 0);
答案 5 :(得分:-4)
Your document should be loaded first, then popup should be open, So write your javascript code in the scope of $(document).ready().
enter code here
$(document).ready(function(){
$("#clickme").click(function(e){
MyWindow=window.open('player.php','Player','width=500','height=300'); return false;
});
});