0

我需要用 Greasemonkey 在后台发帖。我试图动态创建一个 iframe 并发布到它,但它不起作用:

function crossDomainPost() {
    // Add the iframe with a unique name
    var iframe = document.createElement("iframe");
    var uniqueString = "CHANGE_THIS_TO_SOME_UNIQUE_STRING";
    document.body.appendChild(iframe);
    iframe.style.display = "none";
    iframe.contentWindow.name = uniqueString;

    // construct a form with hidden inputs, targeting the iframe
    var form = document.createElement("form");
    form.target = uniqueString;
    form.action = "http://INSERT_YOUR_URL_HERE";
    form.method = "POST";

    // repeat for each parameter
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "INSERT_YOUR_PARAMETER_NAME_HERE";
    input.value = "INSERT_YOUR_PARAMETER_VALUE_HERE";
    form.appendChild(input);

    document.body.appendChild(form);
    form.submit();
}


有人说,即使我们发布,我们也无法获取价值。如果我们不能,只需让用户访问该页面就足够了。它可以在 JS、jQuery、AJAX 帖子中。不仅是 form-iframe 技巧。

4

1 回答 1

5

Greasemonkey 内置了对跨域发布的支持。您不需要使用 jsonp,也不需要 iframe。使用GM_xmlhttpRequest 函数

与其尝试构建表单并发布它,不如直接发送表单编码的数据:

var formData1   = "1 INSERT_YOUR_PARAMETER_VALUE_HERE";
var formData2   = "2 INSERT_YOUR_PARAMETER_VALUE_HERE";
var formData3   = "3 INSERT_YOUR_PARAMETER_VALUE_HERE";
// etc.

GM_xmlhttpRequest ( {
    method:     "POST",
    url:        "http://YOUR_SERVER.COM/YOUR_PATH",
    data:       "formData1=" + encodeURIComponent (formData1)
                + "&" + "formData2=" + encodeURIComponent (formData2)
                + "&" + "formData3=" + encodeURIComponent (formData3)
                // etc.
                ,
    headers:    {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    onload:     function (response) {
        console.log (response.responseText);
    }
} );
于 2012-06-30T16:19:27.217 回答