代码之家  ›  专栏  ›  技术社区  ›  Mala

javascript:从GM脚本调用嵌入函数

  •  2
  • Mala  · 技术社区  · 14 年前

    在网页上有

    <script>
      function fn982734()
      {
         // some code
      }
    </script>
    

    var fn = fields[5].getElementsByTagName("a")[0].getAttribute('onclick').substr(7,11);
    console.log(fn); // outputs fn982734 to the firebug console
    window[fn]();
    

    此代码不起作用,并在错误控制台中产生错误:window[fn]不是函数。但是,直接在firebug中键入:

    var fn = 'fn982734';
    window[fn]();
    

    效果很好。发生什么事?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Brock Adams    14 年前

    Greasemonkey脚本在沙盒中,而Firebug不是。 请参见: "Avoid Common Pitfalls" (in Greasemonkey) .

    unsafeWindow

    unsafeWindow.fn982734();
    

    .
    或者,

    var fn = 'fn982734';
    unsafeWindow[fn]();
    

    从Greasemonkey脚本内部也可以。

        2
  •  0
  •   kwah    13 年前

    我意识到我对这个问题有点晚了,但请不要鼓励使用unsafeWindow-它被命名为 是有原因的。

    Greasemonkey's Greasepot Wiki . 此代码应正确调用原始帖子中描述的函数:

    location.href = "javascript:void(fn982734())";