使用 Greasemonkey 添加我自己的 onclick 函数

发布于 2024-12-29 10:38:59 字数 740 浏览 2 评论 0原文

我想向页面添加一个带有 onclick 事件的按钮。它最终会打开一个覆盖 div。

但是,我什至无法运行警报。

我使用了几种技术,例如 unsafeWindow,并将脚本标记添加到正文,但仍然不起作用。

这是我现在正在使用的代码:

function main() {
    var script_source = '<script type="text/javascript">function doenwedan(){alert("hebben we gedaan!");}</script>';
    var link_knop = '<br /><br /><br /><br /><button onclick="doenwedan()" value="gaan we doen">gaan we doen</button>';
    var orginele_pagina = document.getElementById('ds_body').innerHTML;
    document.getElementById('ds_body').innerHTML =orginele_pagina + link_knop + script_source ;
}

main();

我怎样才能让它工作?
我需要这样的技术,因为当调用覆盖 div 时,将需要新的函数,所以如果要注入它们,那么......

I want to add a button, with an onclick event, to the page. It will eventually open an overlay div.

But, I can't get even an alert running.

I've used a couple of techniques, like unsafeWindow, and adding the script tags to the body, but still doesn't work.

This is the code that I'm using right now:

function main() {
    var script_source = '<script type="text/javascript">function doenwedan(){alert("hebben we gedaan!");}</script>';
    var link_knop = '<br /><br /><br /><br /><button onclick="doenwedan()" value="gaan we doen">gaan we doen</button>';
    var orginele_pagina = document.getElementById('ds_body').innerHTML;
    document.getElementById('ds_body').innerHTML =orginele_pagina + link_knop + script_source ;
}

main();

How can I get this working?
I need a technique like this, because when the overlay div is called, there will be new functions needed, so if got to inject them then...

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

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

发布评论

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

评论(1

酷炫老祖宗 2025-01-05 10:38:59

几件事:

  1. 如果没有必要,不要注入 JS(在“邪恶霸主”列表中“不要变成蛇;它永远不会有帮助”)。
  2. 如果没有必要,请不要使用 innerHTML。它破坏了事情并导致尝试正则表达式 HTML 的诱惑。
  3. 使用 DOM 方法添加内容,但很少有例外。
  4. 我不确定由此创建的脚本节点是否会被解析。
  5. 不妨开始使用jQuery。它使事情变得更简单、更稳健。

把它们放在一起,你的脚本将变成这样:

// ==UserScript==
// @name     _Add a button
// @include  http://YOUR_SERVER/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==

function doenwedan () {
    alert ("hebben we gedaan!");
}

var orginele_pagina = $('#ds_body');
orginele_pagina.append (
    '<br><br><br><br><button id="myButton" value="gaan we doen">gaan we doen</button>'
);

$("#myButton").click (doenwedan);

Several things:

  1. Don't inject JS if you don't have to (On the Evil Overlord list next to "Don't turn into a snake; it never helps").
  2. Don't futz with innerHTML if you don't have to. It busts things and leads to the temptation of trying to regex HTML.
  3. Use DOM methods to add things, with rare exceptions.
  4. I'm not sure that a script node, created thus, will be parsed anyway.
  5. Might as well start using jQuery. It makes things simpler and more robust.

Putting it all together, your script would become something like:

// ==UserScript==
// @name     _Add a button
// @include  http://YOUR_SERVER/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==

function doenwedan () {
    alert ("hebben we gedaan!");
}

var orginele_pagina = $('#ds_body');
orginele_pagina.append (
    '<br><br><br><br><button id="myButton" value="gaan we doen">gaan we doen</button>'
);

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