Tampermonkey / Greasemonkey仅在iframe中运行

时间:2013-12-19 12:45:13

标签: javascript iframe greasemonkey tampermonkey

我不知道为什么,但我的greasemonkey / tampermonkey脚本拒绝在有iframe的页面上运行。 该脚本在iframe内运行,但不在根域内运行。如果我使用@noframes选项,则在包含iframe的网页上根本不会发生任何事情。

我甚至采取了行动 // @match http://*/*

我的测试代码非常简单......

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = document.location.protocol + '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js';

document.getElementsByTagName('head')[0].appendChild(script)

var title = $('title').html();
alert(title);

这将显示一个警告,其中包含iframe的名称,但不显示实际的网站。我已经尝试过使用greasemonkey和tampermonkey。

1 个答案:

答案 0 :(得分:1)

  1. 您的目标父网页可能没有实际的<head>元素, 导致该脚本实例崩溃。

  2. 这不是你用脚本添加jQuery的方式!你会遇到各种各样的时间问题和代码冲突。
    请参阅this answer for the best cross-platform way to add jQuery的第二部分(但如果您只使用GM / TM,那就太过分了)。并this bit for resolving jQuery conflicts and crashes in GM/TM scripts

    iframe可能会自己加载jQuery,或者你只是有一个快乐的计时事故(现在),但不要依赖这样的运气代码。

  3. 对于这样的问题,脚本元数据部分/标题至关重要。你的问题需要显示整个脚本 来自浏览器控制台的错误和指向目标页面的链接也不会出错。
  4. 如果脚本是针对Tampermonkey / Greasemonkey(没有纯Chrome),则可以使用:

    // ==UserScript==
    // @name     _YOUR_SCRIPT_NAME
    // @include  http://YOUR_SERVER.COM/YOUR_PATH/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
    // @grant    GM_addStyle
    // ==/UserScript==
    /*- The @grant directive is needed to work around a design change
        introduced in GM 1.0.   It restores the sandbox.
    */
    var title = $('title').html();
    alert(title);