Jquery:如何检查新打开的窗口是否已完全加载?/ 窗口加载外部页面(如 www.yahoo.com)

7
以下内容无法运行,为什么?
var myWindow=null;
myWindow = window.open(targetUrlVar,"_blank","resizable=yes");
$(myWindow).load(function(){
    alert('hello');
});

尽管MyWindow是一个Window引用,但并没有执行任何检查来确定它是否已完全加载。我曾认为$(window).load(...)可以在这里起作用,只需将"window"替换为"MyWindow"。

以下代码有效:

$(myWindow).load(function(){
    alert('hello');
});

对于 targetUrlVar 是内部资源(比如属于我的域名的页面),它可以工作。但是,一旦我想使用 .load() 或者 myWindow.onload() 并且 targetUrlVar 是外部页面(比如 www.yahoo.com 或者 www.google.com),就无法再工作了。没有任何警告被显示。
我需要你们的帮助... 谢谢大家!

2
我认为这会有所帮助:https://dev59.com/eW445IYBdhLWcg3wdqOO - Joe Landsman
$(win.document).ready(function() { $(win.document).contents().find("...").doStuff(); }); 这只有在文档准备好时才会执行...这不是我需要的...我更希望在窗口完全加载后得到通知!!而不是在DOM准备好时就通知我..谢谢。 - arthur
我刚刚测试了一下,似乎可以工作。请查看我的答案中的测试脚本。 - Joe Landsman
3个回答

1
如果您想在子窗口的DOM状态无论如何都触发警报,则应该使用此方法。我还提供了一种测试此假设的方法。
创建一个测试PHP脚本(或类似的脚本语言),并使用以下内容:
<html>
<head><title>test</title></head>
<body>
    <?php sleep(5); // Sleep to delay DOM from loading ?>

    Done sleeping...
</body>
</html>

然后使用以下JavaScript将此测试页面作为您的子窗口调用:

win = window.open('test.php', 'test', 'width=300, height=400, x=800');
win.focus();
$(win.document).ready(function() {
    alert('Window is open');
});

你会注意到,在子窗口中出现“Done sleeping…”之前,来自父窗口的alert()已经触发。


请再重复一遍:我需要在窗口加载后而非文档准备就绪时,运行 alert('window is open') 函数。我知道你的脚本能够工作,因为我已经实现了它。但是我需要在窗口被加载之后才运行它……这就是我在我的代码中使用 $(window).load() 函数并且 "window" 代表新打开窗口的引用。 - arthur

0
$(document).ready(function() {
   //perform tasks, DOM is loaded
});

希望这能有所帮助。

我需要在窗口完全加载后得到通知:一种类似于$(reference_to_window).load(....){}的方法!!!而不是DOM准备就绪。 - arthur
整个窗口还是窗口的一部分? - Grigor
整个部分,我尝试了 $(myWindow).load(function(){ }); 但它没有起作用...有什么想法吗? - arthur

0

我看到这个问题有点老了。

然而,Arthur说:

对于targetUrlVar是一个内部资源(比如属于我的域的页面),它可以工作。但是一旦我想要使用.load()或myWindow.onload()并且targetUrlVar是外部页面(比如www.yahoo.com或www.google.com),它就不再工作了……没有任何警报被显示。

我认为问题可能是由于targetUrlVar是外部的,警报可能被阻止以防止跨站脚本(也称为XSS)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接