【问题标题】:Userscript does not execute in Facebook "Like" iframe用户脚本不会在 Facebook “赞” iframe 中执行
【发布时间】:2018-12-03 06:42:56
【问题描述】:

根据this post,我应该能够通过指定匹配 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 中运行?

【问题讨论】:

    标签: iframe facebook-like userscripts tampermonkey


    【解决方案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 -> Run syntax check,您会看到。

    接下来,Tampermonkey 试图保护您免受这种愚蠢的影响默认将某些网站列入黑名单
    以 Facebook 为例:

    1. Facebook 随处发送他们的小部件、脚本、图像、iframe 垃圾邮件。如果脚本在每个实例上运行,它可能会降低许多站点的性能。 (个人而言,使用 uMatrix 和 uBlock 等工具彻底关闭 Facebook 和类似网站。)
    2. Facebook 小部件是恶意脚本编写者的主要目标。因此,由于很少有正当理由编写这些脚本,Tampermonkey 会尝试默认阻止这些脚本。


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

    1. 转到 Tampermonkey 设置。

    2. 配置模式设置为“初学者”或“高级”:

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

    4. Blacklisted Pages 框中,您可能会看到如下行:

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

    【讨论】:

    • 嗨,很抱歉语法错误。它发生在我缩短现有代码并在我的一个括号上以某种方式退格-d 时:|不过感谢您的回答!我不知道查询参数还需要在 URL 中添加 *
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多