Применить Greasemonkey / Tampermonkey / userscript к iframe?

название в значительной степени вопрос:

можно ли добавить скрипт Greasemonkey на веб-сайт iframed?

Если да, то как?

спасибо.

2 ответов


в Greasemonkey (и Tampermonkey и большинство движков userscript) a скрипт будет срабатывать на iframe автоматически если он отвечает @include, @exclude и/или @match директивы.
И популярный вопрос как остановить Greasemonkey от стрельбы по iframes.

Итак, если ваш сценарий имел совпадение, как:

@match https://fiddle.jshell.net/*

он будет работать на страницах "вывода" jsFiddle, независимо от того, появился в iframe.


если вы хотите, чтобы стрелять на просто iframed содержание:

тогда вы бы проверили window.self собственность.
Например, предположим, что у вас есть целевая страница, например:

<body>
    <h1>I'm some webpage, either same-domain or not.</h1>
    <iframe src="//domain_B.com/somePath/somePage.htm">
...

тогда вы можете использовать такой скрипт, как:

// ==UserScript==
// @name    _Fires specially on domain_B.com iframes
// @match   *://domain_B.com/somePath/*
// ==/UserScript==

if (window.top === window.self) {
    //--- Script is on domain_B.com when/if it is the MAIN PAGE.
}
else {
    //--- Script is on domain_B.com when/if it is IN AN IFRAME.
    // DO YOUR STUFF HERE.
}

обратите внимание, что если вы делаете расширение chrome для своего userscript, вам также нужно добавить "all_frames": true для вашего манифеста или вашего расширения не будет работать на iframes.

пример:

"content_scripts": [
    {
      "matches": ["*://*/*"],
      "all_frames": true,
      "js":["dont.js"],
      "run_at":"document_start"
    }
  ]