Userscript не выполняет в фрейме Facebook «Нравится» - PullRequest
0 голосов
/ 03 декабря 2018

Согласно этой записи , я должен иметь возможность заставить скрипт пользователя работать в iframe, просто указав соответствующий URL.Тем не менее, это не работает для меня в случае встроенной кнопки iframe для 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, и это codeforces.com.Удаление одной или двух из этих директив @match ничего не меняет.

Почему скрипт не запускается в этом iframe?

1 Ответ

0 голосов
/ 03 декабря 2018

Сначала , что у 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. В последней строке есть синтаксическая ошибка.Это было }(); Это должно быть } ) ();
    Вы бы видели, что если бы вы заглянули в консоль или использовали Developer -> Запустите проверку синтаксиса из редактора Tampermonkeymenu.

Далее Tampermonkey пытается защитить вас от такой глупости по умолчанию внесение в черный список определенных сайтов .
В случае Facebook:

  1. Facebook спамит свои виджеты, скрипты, изображения, фреймы везде.Если скрипт запускается на каждом экземпляре, это может ухудшить производительность многих сайтов.(Лично используйте такие инструменты, как uMatrix и uBlock, чтобы полностью закрыть Facebook и подобные сайты.)
  2. Виджеты Facebook являются основной целью для вредоносных сценариев.Таким образом, поскольку редко существует законная причина для их написания, Tampermonkey пытается заблокировать их по умолчанию.


Вы можете посмотреть, что Tampermonkey пытается заблокировать с помощью:

  1. Перейдите в настройки Tampermonkey.

  2. Установите Режим конфигурации на «Начинающий» или «Расширенный»:
    mode setting

  3. Прокрутите вниз до « Безопасность ».

  4. В В черный список страниц , вы можете увидеть строки вроде:

    *://www.facebook.com/plugins/*
    *://www.facebook.com/*/plugins/*
    
  5. Удалите строку, которая останавливает выполнение, которое вы хотите, и нажмите кнопку Сохранить для этого текстового поля.

...