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事件可以非常轻松地完成此操作。