用户脚本未在Facebook“赞” iframe中执行

时间:2018-12-03 06:42:56

标签: iframe facebook-like userscripts tampermonkey

根据this post,通过指定匹配URL,我应该能够使用户脚本在iframe中工作。但是,如果将iframe for Facebook嵌入按钮之类的按钮(例如-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 Console中仅给出一个日志语句,即codeforces.com。删除其中的@match个伪指令中的一两个不会改变。

为什么脚本不能在该iframe中运行?

1 个答案:

答案 0 :(得分:1)

首先 MCVE存在两个问题

  1. @match必须为:

    // @match  https://www.facebook.com/v2.8/plugins/like.php*
    

    因为典型的URL类似于:www.facebook.com/v2.8/plugins/like.php?app_id...

  2. 最后一行存在语法错误。它是}();,它必须是} ) ();
    您会发现,如果您在控制台中查看或使用了Tampermonkey编辑器菜单中的 Developer -> 运行语法检查

接下来, Tampermonkey试图保护您免遭这种愚蠢行为默认情况下将某些网站列入黑名单
对于Facebook:

  1. Facebook到处都是垃圾邮件其部件,脚本,图像,iframe。如果在每个实例上运行脚本,则可能会降低许多站点的性能。 (个人使用uMatrix和uBlock等工具可以完全关闭Facebook和类似网站。)
  2. Facebook窗口小部件是恶意脚本编写者的主要目标。因此,由于很少有合法的理由来编写这些脚本,因此Tampermonkey会默认尝试阻止它们。


您可以通过以下方式查看Tampermonkey试图阻止的内容

  1. 转到Tampermonkey设置。

  2. Config模式设置为“入门”或“高级”:
    mode setting

  3. 向下滚动到“ 安全性”。

  4. 列入黑名单的页面框中,您可能会看到以下行:

    *://www.facebook.com/plugins/*
    *://www.facebook.com/*/plugins/*
    
  5. 删除停止所需执行的行,然后为该文本框按下保存按钮。