【问题标题】:Raising alert after the page loads completely页面完全加载后发出警报
【发布时间】:2017-08-06 19:20:54
【问题描述】:

我想加载stackoverflow page,然后发出警报,严格一个接一个,不使用jQuery等框架。 我浏览了here 的答案,也访问了this

我在浏览器控制台中运行了以下命令。 页面加载但未引发警报。我在 windows 8.1 中使用 chrome。

尝试#1:

window.location.href = 'https://stackoverflow.com/';
window.onload = function () { alert("It's loaded!") }

尝试 #2:

window.location.href = 'https://stackoverflow.com/';
if(document.readyState === "complete") {
  //Already loaded!
  window.onload = function () { alert("It's loaded!") }
}
else {
  //Add onload or DOMContentLoaded event listeners here: for example,
  window.addEventListener("onload", function () {/* your code here */}, false);
  //or
  //document.addEventListener("DOMContentLoaded", function () {/* code */}, false);
}

尝试 #3:

window.location.href = 'https://stackoverflow.com/';
var everythingLoaded = setInterval(function() {
  if (/loaded|complete/.test(document.readyState)) {
    clearInterval(everythingLoaded);
    alert("It's loaded!");
  }
}, 1000);

尝试 #4:

也尝试了 setTimeout() 但也不起作用。

我也用window.location.replace() 尝试了上述示例。

我该如何进行这项工作?

P.S:我是 javascript 新手。上面的代码不是我的,但我只是想解决它们。我也没有声称完全理解它们。

【问题讨论】:

  • 我认为这样的事情是行不通的。当您将另一个页面加载到窗口中时,当前页面中的所有脚本都会停止运行。
  • 你的目标是什么?有些事情可能会也可能不会起作用。
  • @MarcRohloff:我的目标类似于输入用户名并在 gmail 登录页面上单击“下一步”。在要求密码的页面完全加载后,输入密码并提交。所有这些都在 javascript 中完成。单击“下一步”后,我无法发出警报。
  • 我很确定 gmail 对在域中加载有限制。您可以尝试:var popup = window.open("http://stackoverflow.com/"); popup.onload = function () { alert("It's loaded!") };,但这可能会被弹出窗口阻止程序阻止。
  • @MarcRohloff:我在其他网站上尝试过使用简单的 html 表单,但这也不起作用。

标签: javascript


【解决方案1】:

正如 Barmar 指出的那样,这是不可能的。新页面加载将从旧页面中删除所有 JavaScript。一些替代方案是:

  • 您可以使用window.open api 打开新页面或在新选项卡中并附加事件处理程序。

  • 您可以在框架内加载页面(如果没有任何限制阻止)并向框架添加加载事件。

  • 您可以使用XMLHttpRequest(或您选择的库)加载页面并将结果插入<div>,尽管并非所有这些都可能有效。

页面加载后,您不会说出要执行的操作。在大多数情况下(通常除非您拥有第二页),您无法访问第二页上的任何信息。

【讨论】:

  • 如果不是同一个域,XMLHttpRequest 将不起作用,除非服务器发送 Access-Control-Allow-Origin 标头。
猜你喜欢
  • 2019-02-23
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
相关资源
最近更新 更多