Как вставить код Javascript в тело вместо Head в GreaseMonkey - PullRequest
2 голосов
/ 06 октября 2011

Мне нужна функция javascript для загрузки, прежде чем вызывать ее с помощью GreaseMonkey.но кажется, что GreaseMonkey всегда помещает мой код в заголовок HTML.Как я могу вставить свой код в тело вместо этого.Желательно в самом конце

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

Чтобы ответить прямо здесь:

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 и вызвать ее без вставки.

0 голосов
/ 06 октября 2011

Вы можете определить функцию, а затем записать ее непосредственно в элемент скрипта в конце тела.Например:

function myFunc() {
    // ...
}    

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