从网页调用 Greasemonkey 函数

发布于 2024-08-30 20:34:00 字数 236 浏览 4 评论 0原文

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

例如,

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

我知道,我可以通过执行 unsafeWindow.do_this() 但这样做会阻止 我调用 GM_xmlhttpRequest()。

有什么想法吗?

Can I call function() of my custom Greasemonkey from my page?

For example,

I created a GM script that contains do_this() function.
I want my-web-site.com call the do_this() function.
But I can't.

I know, I can by doing unsafeWindow.do_this() but doing so prevents
me from calling GM_xmlhttpRequest().

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灼痛 2024-09-06 20:34:03

这是有效的示例,首先创建元素,然后 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())
}

here the example that working, first create element then 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())
}
绝情姑娘 2024-09-06 20:34:03

我刚刚遇到了同样的问题。您可以在维基百科中找到有用的信息。我建议使用脚本注入将所需的代码插入到文档中。这样它就会像在页面源代码中一样运行。您也不能在那里使用 GM_ 函数,但您可以结合使用脚本注入(例如检索变量)和带有所有 GM_ 函数的经典 Greasemonkey 脚本(例如,您可以使用您读取的变量并使用 GM_xmlhttpRequest 发布它们())。

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

我希望这有帮助。

I just had the same Problem. You can find good information here in the wiki. I would suggest to use script injection to insert the needed code into the document. That way it will run like its in the sourcecode of the page. You can't use GM_ functions there either but you can use a combination of script injection (to retrieve a variable for example) and classic greasemonkey scripting with all the GM_ functions (For example you could use the variables you read and POST them with GM_xmlhttpRequest()).

Furthermore, techniques like script injection have several security-related advantages over unsafeWindow.

I hope that helps.

傻比既视感 2024-09-06 20:34:03

我自己从未使用过此方法,但这是解决方法 http://wiki.greasespot.net/0.7.20080121.0% 2B_兼容性

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

Never used this myself but here is the workaround http://wiki.greasespot.net/0.7.20080121.0%2B_compatibility.

unsafeWindow.someObject.registerCallback(function() {
    var value = "bar";
    setTimeout(function() {
    GM_setValue("foo", value);
    }, 0);
});
源来凯始玺欢你 2024-09-06 20:34:03

不可以,GM_* 函数无法从网页访问。

No, GM_* functions are not accessible from webpage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文