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 に答える