【问题标题】:JavaScript on page load function not working页面加载功能上的 JavaScript 不起作用
【发布时间】:2015-05-07 13:55:42
【问题描述】:

我正在尝试编写将在子页面(使用window.open 函数创建)完全加载后执行的 JavaScript 代码。

我尝试了window.onloadwindow.setTimeout 之类的功能,但似乎都不起作用。我也尝试使用不同的浏览器,但没有成功。

我有一个 HTML 文件 myhtml.html,它调用外部 JavaScript 文件 Test1.jsTest1.js 打开一个网页 (www.google.com) 然后生成一个弹出窗口。

HTML:

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Testin page</title>
  <script type="text/javascript" src="Test1.js"></script>
  <script type="text/javascript">
    function  callValidation()
    {
      var p;
      var i=1;

      if(document.getElementById("radio1").checked){
          p="radio1";
      }
      directValidation(p);
      alert("Ending script");
    }
  </script>
</head>
<body>
  <h1><em><strong>Test Page</strong></em></h1>
  <h4><em><strong>Version 1.0</strong></em></h4>
  <form name="mainf" id = "mainf">
    <input id="radio1" name ="radio1" type="radio" value = "Test Button"/>
    <input type = "submit" name="submit" OnClick="callValidation();"/>
  </form>
</body>
</html>

Test1.js:

var p;
function directValidation(p)
{
  alert(p);

  if (p="radio1")
  {
    fun1();
  }
}

function fun1()
{
  window.open("http://www.google.com");
  window.onload = function(){ alert('Not Working!!'); }
  alert("It is working but without waiting for page to load!! The above alert box didn't work");
}

在上面的代码中,alert('Not Working!!'); 没有执行。

alert("It is working but without waiting for page to load!! The above alert box didn't work");

在加载 www.google.com 之前执行。

在上面的代码中,我什至尝试了以下方法:window.setTimeout('',5000);,但我也无法获得 5 秒的延迟。

【问题讨论】:

  • 您能否确认您的 Google 弹出窗口已打开,并且您收到“它正在工作...”的警报?
  • 带有“It is working...”的警报运行良好,但在 www.google.com 完全加载之前弹出。
  • this answer 有解决方案。
  • window.open 返回对打开窗口的引用,但在您的情况下,您将负载处理程序添加到当前窗口
  • Robin:我按照你在那篇文章中的建议编辑了脚本 w.onload = function(){ alert('Not Working!!'); } alert("它正在工作,但没有等待页面加载!!上面的警告框没有工作");还是没有运气

标签: javascript html webpage


【解决方案1】:

window.open 将打开自己的窗口,拥有自己的环境。如果您希望在新窗口中显示弹出窗口,则需要在新窗口中加载的页面的源代码中包含该弹出窗口。

在你的行中

window.onload = function(){ alert('Not Working!!'); }

window 对象是源窗口,而不是新打开的窗口。源窗口可能早已通过onload 事件。

编辑

如果您只想在新标签页中向 google 打开查询,请尝试:

window.open("http://www.google.com/#q=SEARCH_TERM");

但请注意 - 除非这是作为用户交互的直接结果执行的(例如:单击按钮),否则通常只会被浏览器阻止,因为它被视为“弹出窗口”。

【讨论】:

  • 那么如何直接调用子窗口??并检查子窗口是否正确加载?
  • 当你加载子窗口时,你会给它一个 URL 来加载。在该 URL 上提供一些 javascript。
  • 很抱歉,您能否再详细说明一下,因为我是 java 脚本的新手。
  • 如果您在 PAGE A 上运行代码,您可以打开一个新窗口到 PAGE B - 但该页面归那里运行的任何代码所有。您不能在 PAGE A 上运行代码并让它在不同的窗口/选项卡中影响 PAGE B。
  • 例如,如果 www.google.com 运行一些 javascript 会打开一个新标签页到 www.facebook.com,则在 Google 上运行的代码无法在 Facebook 标签页上执行操作。
【解决方案2】:

尝试将 onload 放在函数之外。那是事件,它在事件发生时触发,在这种情况下是在加载 Windows 时。在你这样做的过程中,当你调用 fun1 时,你将 onload 事件绑定到窗口。

【讨论】:

    【解决方案3】:

    在应该打开的页面中,在body标签中,放一个onload标签:

    <body onload="yourfunction()">HTML code</body>
    

    【讨论】:

    • 这是谷歌页面,你能建议一些链接或方法来加载它吗?我不想使用 document.write 方法来编辑子窗口的任何 html 代码。
    • 你不能使用事件监听器来检测页面何时加载。从来没有机会玩这个,你必须自己弄清楚:(
    • 试过但不是指 www.google.com 而是 myhtml.html
    【解决方案4】:

    当你这样做时

    window.onload = function(){ alert('Not Working!!'); }
    

    在您的代码中,window 指的是您的主页。

    既然要和新打开的页面相关,就得获取新页面的引用,由window.open()返回

    var openedWindow = window.open("http://www.google.com");
    openedWindow.onload = showAlert();
    
    function showAlert() {
        alert('Not Working!!');
    }
    

    【讨论】:

    • 编辑代码: var w=window.open("google.com"); w.onload = function(){ alert('Not Working!!'); } alert("它正在工作但是无需等待页面加载!!上面的警告框没有工作”);仍然没有变化......我在这里做错了吗??
    • 我已经更改了 onload 部分,现在弹窗加载时警报显示正确
    • 谢谢尼科。但看起来仍然没有运气。你在你的机器上试过吗?如果是的话可以知道你使用的是哪个浏览器??
    • 刚刚再次编辑以获得更正确的方式,适用于 chrome 尝试最新版本的代码;)
    • Yes 显示“不工作”弹出窗口,但不幸的是它没有等待 www.google.com 完全加载。只要我按下提交按钮,它就会弹出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多