9

如果我使用 Tampermonkey 以编程方式创建 div:

HTML:

<div onclick="myfunc()"/>

脚本:

function myfunc() { alert("clicked"); }

然后点击div;myfunc在我的脚本中没有调用。

我怎样才能让它工作?

(我使用 TM/jQuery 将 div 添加到页面中,并且我想为其附加一些功能。我假设我必须将 HTML 中的函数调用重定向到正确的位置。我也使用GM_函数,所以我不能直接插入代码即可。)

4

2 回答 2

18

问题在于,由于您将属性设置为字符串,因此它正在评估目标页面范围内的字符串,该范围没有myfunc函数。 myfunc驻留在用户脚本范围内。

作为一般规则,无论如何你都不应该使用onclick,但这对于用户脚本来说是三倍的。

使元素易于选择,例如:

<div id="gmMyDiv"></div>


然后,要么使用方法addEventListener()像这样:

function myfunc (zEvent) {
    alert ("clicked"); 
}

var myDiv   = document.querySelector ("#gmMyDiv");
if (myDiv) {
    myDiv.addEventListener ("click", myfunc , false);
}


或者因为您使用的是 jQuery:

function myfunc (zEvent) {
    alert ("clicked"); 
}

$("#gmMyDiv").click (myfunc);
于 2013-05-23T02:44:01.027 回答
0

为“window”对象中的函数分配一个字段

// ==UserScript==
// @name        Content Script Example, grant none
// @grant       none
// ==/UserScript==

function helper() {
    alert('helper');
}

window.helper2 = helper;

element.innerHTML = "<button onclick='window.helper2()'>Click Me</button>" ;

学分:https ://wiki.greasespot.net/Content_Script_Injection

于 2021-10-15T12:09:51.053 回答