如何在正文中插入Javascript代码而不是在GreaseMonkey中的Head

时间:2011-10-06 14:37:03

标签: javascript greasemonkey

在使用GreaseMonkey调用之前,我需要先加载一个javascript函数。但似乎GreaseMonkey总是将我的代码放在html的头部。我怎样才能在体内插入代码。最好是在最后

2 个答案:

答案 0 :(得分:2)

直接在这里回答:

var newElem = document.createElement( 'script'); //create a script tag
newElem.type = 'text/javascript'; // add type attribute
newElem.innerHTML = 'function myFunc() { alert( "alerting"); } myFunc();'; // add content i.e. function definition and a call
document.body.appendChild( newElem); // Insert it as the last child of body

这是正式的方式,但最短的可能是

document.body.appendChild( document.createElement( 'script'));
document.body.lastChild.innerHTML = 'function myFunc() { alert( "the alert"); } myFunc();'; // add content i.e. function definition and a make a call

但是,您的问题描述令人困惑,您想要将一个功能插入页面,然后使用GM调用它吗?为什么要将它插入页面呢?请注意,在上面的代码中,调用是在页面范围内,而不是来自GM,在这种情况下你不能从GM调用它,嗯......你必须使用不安全但不像往常一样不推荐,称之为你必须在页面中插入节点,如:

someplace.innerHTML = '<a onclick=myFunc()>Execute myFunc</a>';

要插入的此功能是否需要在页面范围内?您将无法从GM范围调用它,如果不是将该函数保留在GM范围内并调用它,则不插入。

答案 1 :(得分:0)

您可以定义一个函数,然后将其直接写入正文末尾的脚本元素。 E.g:

function myFunc() {
    // ...
}    

document.body.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + myFunc.toString() + ")();";
    document.body.appendChild(script);
}, false);