使用Greasemonkey进行跨域帖子?

use*_*165 0 javascript post greasemonkey

我需要在后台发布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();
}
Run Code Online (Sandbox Code Playgroud)


有人说即使我们发帖,我们也无法接受这些价值观.如果我们不能,只需让用户访问该页面即可.它可以在JS,jQuery,AJAX帖子中.不仅仅是form-iframe技巧.

Bro*_*ams 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);
    }
} );
Run Code Online (Sandbox Code Playgroud)