2012-06-30 6 views
0

Мне нужно отправить сообщение в фоновом режиме с помощью Greasemonkey. Я пытался создать IFRAME динамически и пост к нему, но он не работает:Перекрестный домен с Greasemonkey?

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 post. Не только форма-iframe трюк.

+0

Попробуйте найти междоменный Аякс; это очень, очень, * очень * общая проблема. – Mathletics

+0

Я искал и только что искал много ... все коды про jsonp get, request ... нет публикации. Знаете ли вы хороший источник? – user1447165

+0

Да, это потому, что вам нужно использовать 'jsonp'. – Mathletics

ответ

4

У Greasemonkey есть встроенная поддержка междоменной проводки. Вам не нужно использовать jsonp или iframe. Используйте the GM_xmlhttpRequest function.

Вместо того, чтобы создать форму и разместить его, вы отправляете данные формы закодированных непосредственно:

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); 
    } 
}); 
+0

, который выглядит правильно, но я не могу принимать значения $ _POST на другой странице. в чем проблема? Кстати, я пытаюсь использовать localhost. – user1447165

+0

Мои тесты показывают, что '$ _POST' по-прежнему заполняется массивом переданных значений. Если он не работает для вас, вам нужно будет открыть новый вопрос и дать точный код, который не совпадает с тем, что вы получаете с помощью 'print_r (file_get_contents (" php: // input "));'. –

Смежные вопросы