当前位置:  开发笔记 > 编程语言 > 正文

Greasemonkey脚本和函数范围

如何解决《Greasemonkey脚本和函数范围》经验,为你挑选了1个好方法。

这是我的脚本代码:

    // ==UserScript==
    // @name          test 
    // @description   test
    // @include       http://*
    // @copyright     Bruno Tyndall
    // ==/UserScript==

    var main = function() {
        var b = document.getElementsByTagName('body')[0];
        var t = document.createElement('div');
        t.innerHTML = 'Hello World';
        t.style.position = 'absolute';
        t.style.zIndex = 1000;
        t.style.bottom = '5px';
        t.style.right = '5px';
        t.firstChild.setAttribute('onclick', 'test();');
        b.appendChild(t);

    }

    var test = function() {
        alert("Hello World");
    }
    main();

我唯一的问题是当单击Hello World时页面无法找到test()函数.请告诉我,我没有通过innerHTML'ing功能上类似的页面来解决它这个.还有另外一种方法吗?

谢谢.



1> ionelmc..:

Greasemonkey在沙箱中执行脚本 - 出于安全原因,页面无权访问它.所有对dom和window的接受都是通过包装.

如果要访问不安全的对象,可以使用wrappedJSObject属性.

对于您的情况,您可以使用unsafeWindow(或window.wrappedJSObject):

unsafeWindow.test = function() { ....

这有一些安全问题,请参阅:http://wiki.greasespot.net/UnsafeWindow

此外,greasemonkey在DOMContentLoaded(当dom准备就绪)事件之后执行脚本,因此您不需要那个onload废话.

此外,您不能使用属性来设置事件侦听器或属性 - 您必须使用dom api.例如:

t.firstChild.addEventListener('click', test, false);

要么:

t.firstChild.addEventListener('click', function(event){ blabla }, false);

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有