【问题标题】:How can a userscript detect when a user navigates to a new page?用户脚本如何检测用户何时导航到新页面?
【发布时间】:2018-01-21 05:11:28
【问题描述】:

我正在编写一个修改我正在玩的浏览器游戏 UI 的用户脚本。但是我遇到了一个问题,当我导航到新页面时,我添加到页面的 UI 元素消失了。

我尝试了几种方法来尝试检测新页面何时加载并重新创建我的 UI 元素。但我一直做不到。

以下是我尝试过的方法:

$(window).on("load", function(){
    console.log("loaded new page");
});

$(document).ajaxComplete(function(){
    console.log("loaded new page");
}); 

$(window).on("hashchange", function(){
    console.log("loaded new page");
 });

当我切换到新页面时,它们都不会被触发。

谁能告诉我为什么这些都不是从我的用户脚本触发的?以及如何正确检测已加载的新页面?

作为参考,我尝试检测的浏览器游戏是https://talibri.com/

编辑: 我在脚本的@match 中包含以下内容。

 @match        *://talibri.com/*
 @match        *://www.talibri.com/*

编辑: 所以昨晚我认为由于 Vignesh 的建议我已经成功了,但不!它实际上仍然无法正常工作。所以今天早上和下午,我一直在尝试任何我能想到的方法来让它发挥作用,我终于弄明白了。

显然我要解析的页面使用的是 Ruby on Rails Turbolinks,它在页面加载方面做了一些奇怪的事情。

为了解决我的问题,我只是做了以下代码:

$(window).on("turbolinks:load", function(){
    console.log("loaded new page");
});

我还做了 load 和 turbolinks:load 来处理这两个加载事件:

$(window).on("load turbolinks:load", function(){
    console.log("loaded new page");
});

【问题讨论】:

  • 您在用户脚本的@match 中包含了什么?
  • 您首先定义一个全局变量,它将默认值设置为主页。您应该在单击菜单和该菜单时触发一个功能。一个函数更新全局变量,你也可以通过它找到你目前所处的位置。
  • *://talibri.com/* *://www.talibri.com/*
  • 有效吗?

标签: javascript jquery


【解决方案1】:

这行得通。

需要在末尾加上*

// @match http*://talibri.com/*

以上检测talibri.com中的所有页面

https://talibri.com/

https://talibri.com/splash/world

https://talibri.com/splash/patches

https://talibri.com/users/sign_in

// ==UserScript==
// @name         My Utility
// @namespace    VigneshRaja_UserScripts
// @version      0.1
// @description  My Companion
// @author       Vignesh Raja
// @include      http*://talibri.com/*
// @grant        GM_setClipboard
// @grant        GM_openInTab
// ==/UserScript==

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多