Greasemonkey + jQuery无法提交表单,也无法访问DOM!

时间:2011-05-01 11:08:28

标签: jquery forms greasemonkey form-submit

在页面上有一个链接,它使用两个参数调用名为submitForm的方法;该方法使用参数设置表单值,然后提交表单。

我使用GreaseMonkey(GM)脚本(下面)和jQuery从链接的href属性中解析和访问这些参数,然后我想自动提交表单。我尝试了三种方法(注释掉了),但似乎没有一种方法可行,所以我想我对通用汽车的运作方式缺少了一些看法。

$(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.因为某些原因看起来无法从GM访问document的错误失败。如果我使用FireBug控制台并输入1.或2.页面提交完美。这真的吓坏了我,因为我之前能够毫无问题地访问该文档。

方法3.不会抛出错误,但页面不会刷新表单提交的结果。我也试过使用.submit()方法,但无济于事。如果我在FireBug控制台中输入3.,则会收到有关$('form...未定义的错误。

似乎通过使用jQuery我无法访问正常的javascript document属性,并且表单的.submit()方法不起作用。

感谢任何敏锐的眼睛或富有洞察力的建议!

1 个答案:

答案 0 :(得分:1)

您无法以通常的方式访问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');