Вопрос по javascript, dom – Записывать динамически созданные элементы DOM веб-страницы с помощью пользовательского скрипта

2

Я хочу извлечь все динамические функции JavaScript из веб-страницы с помощью пользовательского сценария.

Кто-то предложил использовать хук для объектов DOM. Они также предоставили этот пример:

var f = document.createElement;document.createElement = function(tagName){ 
console.log(tagName); 
f.apply(document, arguments); }


Я думаю, что эта функция регистрирует всеdocument.createElement() звонки, но где я могу добавить эту функцию в моем скрипте?
Я попытался создать usercript, который содержит только эту функцию, но она не сработала.

Пользовательский скрипт выполняется после загрузки страницы. Как можно изменить эту функцию, чтобы она отслеживала динамические функции заранее?

Ваш Ответ

1   ответ
2

используйте// @run-at document-start.

Error: User Rate Limit Exceeded

Вот полный скрипт, который регистрирует всеcreateElement() звонки. Он работает как с пользовательскими скриптами Greasemonkey (Firefox), так и с Chrome:

// ==UserScript==
// @name        _Track dynamically added elements
// @namespace   Your PC
// @include     http://YOUR_SERVER/YOUR_PATH/*
// @run-at      document-start
// ==/UserScript==

//--- Intercept and log document.createElement().
function LogNewTagCreations () {
    var oldDocumentCreateElement    = document.createElement;

    document.createElement          = function (tagName) {
        var elem = oldDocumentCreateElement.apply (document, arguments);
        console.log ("Dynamically created a(n)", tagName, " tag.  Link: ", elem);
        return elem;
    }
}

/*--- The userscript or GM script will start running before the DOM is available.
    Therefore, we wait...
*/
var waitForDomInterval = setInterval (
    function () {
        var domPresentNode;
        if (typeof document.head == "undefined")
            domPresentNode = document.querySelector ("head, body");
        else
            domPresentNode = document.head;
        if (domPresentNode) {
            clearInterval (waitForDomInterval);
            addJS_Node (null, null, LogNewTagCreations);
        }
    },
    1
);

//--- Handy injection function.
function addJS_Node (text, s_URL, funcToRun) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhttp://YOUR_SERVER/YOUR_PATH/*Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded user1275375
Error: User Rate Limit Exceeded user1275375
Error: User Rate Limit Exceeded user1275375

Похожие вопросы