【问题标题】:Chrome Extensions and Tampermonkey on YouTube [duplicate]YouTube 上的 Chrome 扩展和 Tampermonkey [重复]
【发布时间】:2014-04-10 12:48:09
【问题描述】:

当我使用 Tampermonkey 中的用户脚本或作为 Chrome 扩展程序为 youtube 制作 chrome 扩展程序时,扩展程序无法识别它何时离开扩展程序应该像通常那样运行的页面,因为 history.push 函数具有最近已经实施。 比如:

// @include     http://www.youtube.com/feed/subscriptions

我这样做是为了让它只在我订阅时运行,但是当我点击一个视频时它会继续加载扩展。 当我把它变成一个 chrome 扩展时,问题仍然存在。

如何查看它是否在某个 youtube 页面上然后运行我的代码?

【问题讨论】:

  • Rob,是的,但该答案不是最新的。我试过了,但它基本上什么也没做。
  • 每一步你都做到了吗?包括使用// @include *://www.youtube.com/* 而不是你目前拥有的?
  • 是的。什么也没发生。

标签: javascript google-chrome-extension youtube userscripts tampermonkey


【解决方案1】:

该问题是由通过 history.pushState() 修改 URL 的页面引起的。它只修改显示 URL 和内容,而不需要重新加载页面。

因此,当您在 Tampermonkey 上运行脚本时,您需要强制重新加载该操作。

注意:如果您只想让脚本在您离开订阅页面时不运行,那么只需将@match 语句更改为您的@include。

// ==UserScript==
// @name       YT pushState
// @namespace  http://tampermonkey.net/
// @version    0.1
// @match      *://*.youtube.com/*
// @grant      none
// ==/UserScript==

window.history.__proto__.pushState = function(a, b, url) {
    window.location.href = url;
}

if (window.location.href.match(/https?:\/\/www\.youtube\.com\/feed\/.*/)) {
    console.log("Put main function here!");                               
} else {
    console.log("Ignore this page");
}

【讨论】:

  • 仅供参考,在 YouTube 上,URL 会在新页面真正加载之前更改。如果你的脚本依赖于文档的结构,那么这种通用方法没有帮助,因为当 URL 发生变化时,文档还没有改变。
  • 这没关系。据我了解,他希望在 URL A 上运行脚本,而不是在 URL B 上运行脚本,而 B 由 history.pushState 设置。上面的脚本允许在检测到 pushState 调用时重新加载整个页面,或者触发一个事件,该事件可以指示用户脚本停止它正在执行的任何操作。
  • 如果您位于 URL A,则脚本不应运行。当您位于 URL B 时,脚本应该运行。但是,在 YouTube 的实现中,即使当前页面仍然是 URL A,URL 也已经更改为 URL B。因此,如果您尝试通过拦截 pushState 调用来检测导航更改,那么您的脚本运行得太早了。
  • "当它离开扩展程序应该运行的页面时无法识别它" -> 所以问题作者在 A (youtube.com/feed/subscriptions) 并且不想在 B ( youtube.com/watch?v=*)。这可以通过拦截 pushState 调用并让它们设置 window.location.href 属性来实现。
  • 你明白我的评论了吗?拦截 pushState 仅提供有关更新 URL 的信息。当 URL 更新时,页面仍未更新(例如,即使 URL 已更改为 /feed/subscriptions,视频播放器仍然可见),因此此时调用脚本没有意义(因为脚本期望文档看起来像提要页面,而不是视频页面)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2018-04-30
  • 2012-01-12
  • 2013-10-21
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多