如何解决window.location.href?

时间:2019-07-12 08:30:51

标签: javascript

我想构建一个海关预定义的Java脚本,该脚本将执行一系列操作 在2个不同的网站上。

但是我的问题是,当我使用重定向

window.location.href

将不执行脚本中的下一个命令。 我正在使用Tampermonkey扩展来执行脚本 例如,我正在使用以下脚本

但是,脚本永远不会进入第二个警报 我在以下线程上问了类似的问题

Simulate mouse clicks in JavaScript in Chrome

如何解决window.location.href?

(function() {
    'use strict';

    alert('alert1');

    window.location.href = ("http://www.w3schools.com");
    alert('alert2’);
})();

2 个答案:

答案 0 :(得分:0)

默认情况下,window.location的工作方式是仅告诉浏览器重定向到给定的URL。此后,浏览器基本上不存在任何代码。我为什么这么说?因为代码只能在将控件提供给浏览器之前运行。在获取新URL的那一刻,代码执行停止。

所以,要回答这个问题-代码执行会在window.location.href之后停止吗?>不是,但是,是的!

将其视为各种返回语句。您执行一些操作,然后返回到另一个页面(使用window.location)。您的警报可能正在执行,但是浏览器会在显示重定向之前启动重定向。

您可以尝试切换到console.log以确认相同,并在浏览器devtools中启用“ Persist Logs”。

但是,我过去也遇到过类似的问题,我通过遵循一些Stack Overflow答案来解决了这个问题。

因此,我将在此处链接答案,以便他们将获得实际解决方案的功劳-

jQuery code not called after window.location.replace( url )

How to run code after changing the URL via window.location?

这可能也有帮助(如果您不熟悉JS)- Javascript: Detect when a window is fully loaded

答案 1 :(得分:0)

您无法使用浏览器上运行的脚本来执行此操作。导航发生后,当前的javascript不再有效。

您将需要控制客户端,并且需要页面加载之间的持久性。

以下是一些选项(无特定顺序)

  • 浏览器扩展(我对它们不太熟悉,所以您需要进行研究)
  • 模拟HTTP请求
    • 您可以编写一个小型应用程序,该应用程序会执行相应的HTTP请求(可能处理cookie,重定向等)以完成此任务。如果您使用C#编写,建议使用WebClientHTML Agility Pack
    • 如果您希望运行网站的javascript,则此方法将无效。
  • 编写脚本以运行headless browser solution,例如无头Chrome。您可能还可以使用Selenium之类的UI测试工具。
  • Electron(将Chrome的渲染和js引擎从其余部分中剥离出来,用于构建跨Playplay应用程序,但您可以使用它来实现目标。)

希望这会有所帮助