window.open影响网页

时间:2014-10-12 20:06:40

标签: javascript html html5 window.open

我有一个链接,使用window.open打开一个新窗口。弹出窗口工作正常,但普通网页停止加载对象(图像,脚本,ajax脚本),有时页面根本不加载。

这是我的代码:

MyWindow=window.open('player.php','Player','width=500','height=300'); return false;

我有什么问题吗?

谢谢, 彼得

6 个答案:

答案 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;
});
});