Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript能判断页面是GET还是POST的结果吗?_Javascript_Http_Post - Fatal编程技术网

Javascript能判断页面是GET还是POST的结果吗?

Javascript能判断页面是GET还是POST的结果吗?,javascript,http,post,Javascript,Http,Post,可能重复: 我正在研究注入任何页面的Javascript。脚本被注入到我无法控制的服务器上。(注入是通过附加组件或bookmarklet完成的。) Javascript需要知道页面是作为HTTP GET还是POST的结果加载的。这样做的原因是,如果页面加载了GET,则URL是该页面的标识符,可以为其添加书签、与其他人共享等。对于帖子,我需要以不同的方式处理它 这能做到吗?我没有找到从Javascript访问请求的方法,但可能有一些技巧我不知道。我想你不能 布伦丹·艾奇昨晚在他的推特上证实了这一

可能重复:

我正在研究注入任何页面的Javascript。脚本被注入到我无法控制的服务器上。(注入是通过附加组件或bookmarklet完成的。)

Javascript需要知道页面是作为HTTP GET还是POST的结果加载的。这样做的原因是,如果页面加载了GET,则URL是该页面的标识符,可以为其添加书签、与其他人共享等。对于帖子,我需要以不同的方式处理它

这能做到吗?我没有找到从Javascript访问请求的方法,但可能有一些技巧我不知道。

我想你不能

布伦丹·艾奇昨晚在他的推特上证实了这一点

在此复制:

@dhh:JavaScript不能在Ajax之外的浏览器中访问HTTP头还有其他原因吗?历史原因是什么

@BrendanEich:@dhh@lostconvos没有好的理由——过去我没有时间(除了document.cookie和navigator.userAgent),没有人跟进

@dhh:我们可以借用xhr:getResponseHeader()和getAllResponseHeaders()的API吗

如果你对这件事感兴趣,我建议你遵循这两个原则


同时,我认为最好的办法是使用两种不同的Java脚本——一种用于POST页面,另一种用于其他页面。您将这两种方法都提供给提供商,并告诉他们如何使用它们。但是是的,这涉及到服务器的合作。

直接检索网页的帖子数据是不可能的;想象一下这是可能的。然后,通过POST请求提交的敏感数据也可以读取,这显然是不需要的

如果您正在编写控制生成的HTML的扩展/用户脚本,则可以使用method=post将查询字符串附加到每个表单元素。只有当POST请求不是脚本化的(AJAX),而是通过表单启动时,这种方法才可靠

示例代码:

javascript:(function(){
    var form = document.forms, i=form.length-1; 
    for(; i>=0; i--) {
        if(/post/i.test(form[i].method)) form[i].action += "#method-post";
    }
    //check whether the hash contains `#method-post`
    var is_post = location.hash.indexOf("#method-post") != -1;
    //Optionally, remove the hash to not interfere with the scripts at the page:
    //location.hash = location.hash.replace('#method-post', '');
})();

位置哈希不会提交到服务器,而是由浏览器传递。此解决方案适用于扩展,但可能不适用于bookmarklet,因为用户应始终激活它。

检查页面的URL以获取值?使用
document.location.href
http://somewhere.com/foo.php?id=1&foo=2
也可以是POST请求@xbonez@xbonez:URL的QueryString部分与HTTP请求方法无关。嗯……是的。在这种情况下,我怀疑是否有办法,因为POST/GET请求是在服务器上发出的,而JS将在客户端运行,仅仅因为页面是从GET加载的,并不意味着它是可书签的。该站点/应用程序可能是完全有状态的。现在我知道这是不可能的,我可能会选择类似的解决方案。通过收听submit事件可以非常轻松地完成此操作。