Применить 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"
}
]