从网页调用Greasemonkey函数

时间:2010-04-30 07:46:49

标签: greasemonkey

我可以从我的页面调用我的自定义Greasemonkey的function()吗?

例如,

我创建了一个包含do_this()函数的GM脚本。 我希望my-web-site.com调用do_this()函数。 但我不能。

我知道,我可以通过做不安全的Wowow.do_this()但这样做可以防止 我来自GM_xmlhttpRequest()。

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

这里是工作的例子,首先创建元素然后 addEventListener

// ==UserScript==
// @name           GM addEventListener Function Test
// @namespace      ewwink.com
// @description    GM addEventListener Function Test
// @include        http://*
// ==/UserScript==

document.body.innerHTML+='<input  type="image" id="alertMeID" onclick="do_this()" style="position:fixed;top:0;left:0" src="http://i55.tinypic.com/2nly5wz.gif" />';

document.getElementById('alertMeID').addEventListener('click', do_this, false);

function do_this(){
  alert('hello World!, today is: '+new Date())
}

答案 1 :(得分:3)

我遇到了同样的问题。您可以找到好的信息here in the wiki。我建议使用脚本注入将所需的代码插入到文档中。这样它就会像在页面的源代码中一样运行。你不能在那里使用GM_函数,但你可以使用脚本注入(例如检索变量)和使用所有GM_函数的经典greasemonkey脚本的组合(例如,您可以使用您阅读的变量并使用GM_xmlhttpRequest发布它们())。

此外,脚本注入等技术与unsafeWindow相比具有一些与安全相关的优势。

我希望有所帮助。

答案 2 :(得分:1)

我自己从未使用过此版本,但这里是解决方法http://wiki.greasespot.net/0.7.20080121.0%2B_compatibility

unsafeWindow.someObject.registerCallback(function() {
    var value = "bar";
    setTimeout(function() {
    GM_setValue("foo", value);
    }, 0);
});

答案 3 :(得分:0)

不,GM_ *功能无法从网页访问。