【问题标题】:Cross-domain post with Greasemonkey?使用 Greasemonkey 跨域发帖?
【发布时间】:2012-07-01 00:26:18
【问题描述】:

我需要使用 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 技巧。

【问题讨论】:

  • 尝试搜索跨域ajax;这是非常、非常、非常常见的问题。
  • 我搜索了,刚刚搜索了很多...所有代码都是关于jsonp get, request...没有post文章。你知道好的来源吗?
  • 是的,那是因为你需要使用jsonp

标签: javascript post greasemonkey


【解决方案1】:

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

【讨论】:

  • 看起来正确,但我不能在其他页面中获取 $_POST 值。问题是什么?顺便说一句,我正在尝试本地主机。
  • 我的测试表明,$_POST 仍然如预期的那样由发送的值数组填充。如果它不适合您,您将需要打开一个新问题并提供失败的确切代码以及您使用print_r (file_get_contents("php://input") ); 获得的内容。
  • GM 4.0 将功能改为GM.xmlhttpRequest
  • @thomasa88,是的,但 GM4 在这里是一个单独的标签,不适用于这个问题。根据 GM 自己的开发人员的建议,无论如何都应该使用 Tampermonkey(无需更改代码),因为 GM4 损坏了很多并且不向后兼容。
猜你喜欢
  • 2011-01-04
  • 2023-03-26
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2018-09-27
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多