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

How to insert Javascript code in the body instead of Head in GreaseMonkey

本文关键字:Head 插入 代码 Javascript GreaseMonkey body      更新时间:2023-09-26

在用GreaseMonkey调用它之前,我需要先加载一个javascript函数。但似乎GreaseMonkey总是把我的代码在html的头部。如何将代码插入正文中呢?最好放在最后

直接在这里回答:

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调用它?为什么要把它插入页面呢?注意,在上面的代码中,调用是在page作用域中,而不是从GM,在这种情况下,您不能从GM调用它,嗯…你必须使用不安全,但通常不建议调用它,你必须在页面中插入节点,如

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

你想要插入的函数需要在页面范围内吗?您将无法从GM作用域中调用它,如果不这样做,只需将函数留在GM作用域中并调用它,而不插入。

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

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