【问题标题】:Recall Tampermonkey script when page location changes当页面位置改变时调用 Tampermonkey 脚本
【发布时间】:2015-11-23 08:54:42
【问题描述】:

好吧,我想知道当用户改变他的位置时是否可以调用 Tampermonkey 脚本(但匹配仍然有效)。例如,我的脚本挂钩 youtube 网站。

我需要让脚本在我更改视频时自动调用,我的实际脚本是:

// ==UserScript==
// @name        xxx
// @namespace    xxx
// @version      1.0
// @description  xxx
// @author       Ikillnukes
// @match        https://www.youtube.com/*
// @match        https://youtu.be/*
// @grant        none
// ==/UserScript==

console.log("Tampermonkey hook!");
var script = document.createElement('script');
script.src = document.location.protocol+"//xxx";
(document.body || document.head || document.documentElement).appendChild(script);

如您所见,我调用 console.log 进行调试,当我刷新或第一次加载网页时会调用它。但是有一次我更改了视频,它不再被调用,这就是我想要避免的。

我也查看了这个:http://tampermonkey.net/documentation.php,但我没有找到任何东西,也许是我查看的太快了?

那么,有什么建议吗?

【问题讨论】:

  • $(document).ready(function(){ .... - 然后在每个页面加载时,它都会执行您想要的操作.. 否则它会执行一次.. 在第一次加载中间的某个地方...
  • 我试过这个,我想避免使用 JQuery 的第一件事,第二件事是它没有按照我的要求做,更糟糕的是因为它发生了同样的事情之前,我尝试使用 document.readystatechange,它只会使脚本无法运行。
  • 对...好吧-你必须意识到 Tampermonkey 在它自己的上下文中运行......就像一个始终运行的单独网页。因此,您还需要挂钩附加脚本的页面事件。它可以是导航事件,如 onbeforeunload、onlaod 或其他通用事件。 readystatechange 是一个好的开始,在 jQuery 源代码中查看它们是如何正确执行此操作的。基本上在每个页面加载时,onready 事件都会被触发并触发 tampermonkey,如果你使用它的话。否则,您的脚本会在每个选项卡上运行一次,并且不会与其他任何内容挂钩。

标签: javascript onload tampermonkey


【解决方案1】:

使用 youtube 脚本定义的自定义 YouTube SPF events:

window.addEventListener("spfrequest", function(e) { console.log("requesting new page") });
window.addEventListener("spfprocess", function(e) { console.log("new page is processed") });
window.addEventListener("spfdone", function(e) { console.log("new page is displayed") });

Chrome 用户查找此类事件的提示:
使用 DevTools → 元素面板 → 事件监听器面板

在较新版本的 Chrome 上:
使用 DevTools → Sources 面板 → Event Listeners(不是断点)

【讨论】:

  • 谢谢,但我仍然有最初的问题,并且由于某种原因,代码不想在其中执行,或者至少是其中的一部分。我会解释一下,让我编辑帖子;)
  • 也许将这两种方式放在一起比较好,对于 46 个用户,另一种对于 44 个用户。
  • 是的,你的回答是对的,问题是我的,我会尽力快速解决,一分钟后给你解决。
  • 对不起,删除你最后的评论我想我已经解决了,非常感谢! :D
猜你喜欢
  • 2021-07-18
  • 2021-04-03
  • 1970-01-01
  • 2015-06-17
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
相关资源
最近更新 更多