Greasemonkey + jQuery не может отправить форму или получить доступ к DOM! - PullRequest
1 голос
/ 01 мая 2011

На странице есть ссылка, которая вызывает метод с именем submitForm с двумя параметрами; метод использует параметры для установки значений формы, а затем отправляет форму.

Я использую скрипт GreaseMonkey (GM) (ниже) и jQuery для анализа и доступа к этим параметрам из атрибута href ссылки, а затем хочу автоматически отправить форму. Я испробовал три подхода (закомментированных), ни один из которых, похоже, не работает, поэтому я думаю, что мне чего-то не хватает в том, как работает GM.

$(document).ready(function() {
    var regex = /\'([0-9]+)\',\'([0-9]+\'/g;
    var link = $('td.dataContend:first a');
    var match = regex.exec($(link).attr('href'));
    if (match != null) {
        $('input[name="field1"]').val(match[1]);
        $('input[name="field2"]').val(match[2]);

        try {
            // 1. The next line says "document.submitForm is not a function"
            //document.submitForm(match[1], match[2]);
            // 2. The next line says "document.billViewForm is undefined"
            //document.billViewForm.submit();
            // 3. The next line throws no error but the page does not change
            //$('form[name="billViewForm"]').trigger('submit');
        }
        catch (err) {
            alert(err);
        }
    } else {
        alert('no match');
    }
});

Я подтвердил, что все, пока блоки try / catch работают правильно; регулярное выражение правильно анализирует значения, а jQuery изменяет значения поля формы.

Подход 1. и 2. терпят неудачу с ошибками, которые выглядят так, будто я не могу получить доступ к document от GM по какой-то причине. Если я использую консоль FireBug и набираю 1 или 2, страница отправляется идеально. Это действительно пугает меня, так как я смог получить доступ к документу раньше без каких-либо проблем.

Подход 3. не выдает ошибку, но страница не обновляется с результатом отправки формы. Я пытался использовать метод .submit(), но безрезультатно. Если я ввожу 3. в консоли FireBug, я получаю ошибку о том, что $('form... не определено.

Кажется, что при использовании jQuery я не могу получить доступ к обычным свойствам javascript document, а метод формы .submit() не работает.

Спасибо за любые острые глаза или проницательные предложения!

1 Ответ

1 голос
/ 01 мая 2011

Вы не можете получить доступ к пользовательским свойствам окна в GM обычным способом.И если вы хотите получить доступ к узлам внутри страницы, всегда используйте DOM-методы.

Если вам нужен доступ к пользовательским свойствам окна в GM, вам нужно использовать unsafeWindow -объект

Это означает:

//1->submitForm is a user-defined function
unsafeWindow.document.submitForm(match[1], match[2]);

//2->use DOMDocument::getElementsByName() to access the form
document.getElementsByName('billViewForm')[0].submit();

//3-> jQuery is a user-defined object
unsafeWindow.$('form[name="billViewForm"]').trigger('submit');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...