用户脚本不在 Facebook "Like" iframe 中执行
Userscript does not execute in Facebook "Like" iframe
根据 ,我应该能够通过指定匹配 URL 来让用户脚本在 iframe 中工作。但是,如果 Facebook 的 iframe 嵌入按钮,它对我不起作用 - 比如 - codeforces.com
.
作为 MVCE,这里有一个小脚本:
// ==UserScript==
// @name Bug test
// @version 0.1
// @author Gaurang Tandon
// @match https://codeforces.com/*
// @match https://www.facebook.com/v2.8/plugins/like.php
// @match https://www.facebook.com/v2.8/plugins/like.php/
// @match https://www.facebook.com/v2.8/plugins/like.php/*
// ==/UserScript==
(function() {
'use strict';
console.log(window.location.hostname);
}();
在 codeforces.com 上加载它只会在 DevTools 控制台中提供一条日志语句,即 codeforces.com
。删除其中的一两个 @match
指令不会有任何改变。
为什么脚本不在那个 iframe 中 运行?
首先 MCVE 有几个问题:
@match
需要:
// @match https://www.facebook.com/v2.8/plugins/like.php*
因为典型的 URL 是这样的:www.facebook.com/v2.8/plugins/like.php?app_id...
- 最后一行存在语法错误。它是
}();
它需要是 } ) ();
如果您查看控制台或使用 Tampermonkey 编辑器菜单中的 Developer -> 运行 syntax check,您会发现。
接下来,Tampermonkey 试图保护您 免于这种愚蠢行为默认将某些站点列入黑名单。
以 Facebook 为例:
- Facebook 无处不在向其小部件、脚本、图像和 iframe 发送垃圾邮件。如果每个实例上的脚本 运行 可能会降低许多站点的性能。 (就个人而言,使用 uMatrix 和 uBlock 等工具可以完全关闭 Facebook 和类似网站。)
- Facebook 小部件是恶意脚本编写者的主要目标。因此,由于很少有合理的理由编写这些脚本,Tampermonkey 会默认尝试阻止它们。
您可以通过以下方式查看 Tampermonkey 试图阻止的内容:
转到 Tampermonkey 设置。
将配置模式设置为"Beginner"或"Advanced":
向下滚动到“安全”。
在列入黑名单的页面框中,您可能会看到如下行:
*://www.facebook.com/plugins/*
*://www.facebook.com/*/plugins/*
删除停止所需执行的行,然后按该文本框的 保存 按钮。
根据 codeforces.com
.
作为 MVCE,这里有一个小脚本:
// ==UserScript==
// @name Bug test
// @version 0.1
// @author Gaurang Tandon
// @match https://codeforces.com/*
// @match https://www.facebook.com/v2.8/plugins/like.php
// @match https://www.facebook.com/v2.8/plugins/like.php/
// @match https://www.facebook.com/v2.8/plugins/like.php/*
// ==/UserScript==
(function() {
'use strict';
console.log(window.location.hostname);
}();
在 codeforces.com 上加载它只会在 DevTools 控制台中提供一条日志语句,即 codeforces.com
。删除其中的一两个 @match
指令不会有任何改变。
为什么脚本不在那个 iframe 中 运行?
首先 MCVE 有几个问题:
@match
需要:// @match https://www.facebook.com/v2.8/plugins/like.php*
因为典型的 URL 是这样的:
www.facebook.com/v2.8/plugins/like.php?app_id...
- 最后一行存在语法错误。它是
}();
它需要是} ) ();
如果您查看控制台或使用 Tampermonkey 编辑器菜单中的 Developer -> 运行 syntax check,您会发现。
接下来,Tampermonkey 试图保护您 免于这种愚蠢行为默认将某些站点列入黑名单。
以 Facebook 为例:
- Facebook 无处不在向其小部件、脚本、图像和 iframe 发送垃圾邮件。如果每个实例上的脚本 运行 可能会降低许多站点的性能。 (就个人而言,使用 uMatrix 和 uBlock 等工具可以完全关闭 Facebook 和类似网站。)
- Facebook 小部件是恶意脚本编写者的主要目标。因此,由于很少有合理的理由编写这些脚本,Tampermonkey 会默认尝试阻止它们。
您可以通过以下方式查看 Tampermonkey 试图阻止的内容:
转到 Tampermonkey 设置。
将配置模式设置为"Beginner"或"Advanced":
向下滚动到“安全”。
在列入黑名单的页面框中,您可能会看到如下行:
*://www.facebook.com/plugins/* *://www.facebook.com/*/plugins/*
删除停止所需执行的行,然后按该文本框的 保存 按钮。