Greasemonkey欺骗用户代理

时间:2015-03-04 18:06:18

标签: javascript greasemonkey

在我访问的网站中,有一些代码可以检查用户代理,如果不是IE,它会重定向到另一个网站。

if( ! window.navigator.appVersion.match(/MSIE ([0-9]+.)[A-Za-z0-9.]+;/) || new Number(parseFloat (RegExp.$1)) < 5.5 ){
    window.location.replace("/iedownload.htm");
}

有没有办法制作一个快速的greasemonkey脚本来欺骗用户代理?我试过了

GM_xmlhttpRequest({
  method: 'GET',
  url: window.location.href,
  headers: {
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 9.0;) Greasemonkey',
    'Accept': '*/*',
  },
});

但它不起作用。

2 个答案:

答案 0 :(得分:4)

简单的方法是不使用GreaseMonkey并使用在发送请求之前修改UserAgent的加载项。如果检查是服务器端,则不起作用。

但无论如何,你可以试试Max建议的here

所以,像这样:

var fakeAppVersion = function () {
   return "MSIE 9.0;";
};
if (Object.defineProperty) {    
  Object.defineProperty(navigator, "appVersion", {
     get: fakeAppVersion
  });
} else if (Object.prototype.__defineGetter__) {
     navigator.__defineGetter__("appVersion", fakeAppVersion);
}

记得使用     // @ run-at document-start

编辑:这可能不起作用我想如果在该片段有机会运行之前完成检查。在这种情况下,您可以像尝试一样使用GM_xmlhttpRequest,但可以在新选项卡中打开它。 [你可能需要为这个网站禁用弹出窗口阻止程序]。

Greasemonkey在安全性方面已经相当恼人(至少在Firefox上,我正在测试)Brock解决了问题here。修改他的代码以满足您的需求,我得到了这个(有效的AFAIK):

if (window.location.href != 'about:blank') {

  GM_xmlhttpRequest({
    method: 'GET',
    url: window.location.href,
    headers: {
      'User-Agent': 'Mozilla/4.0 (compatible; MSIE 9.0;) Greasemonkey',
      'Accept': '*/*',
    },
    onload: function(response){
      var data = response.responseText;
      addJS_Node (null, null, fireNewTab, data, fireNewTab );     
    } 
  })        

  function fireNewTab (data) {
      var newTab = window.open ('about:blank', '_blank');
      newTab.addEventListener (
          "load",
          function () {           
              //--- Now process the popup/tab, as desired.
              var destDoc = newTab.document;
              destDoc.open ();
              destDoc.write (decodeURI(data));
              destDoc.close ();          
          },
          false
      );
  }    

  function addJS_Node (text, s_URL, funcToRun, data, runOnLoad) {
      var D                                   = document;
      var scriptNode                          = D.createElement ('script');      
      if (runOnLoad) {
          scriptNode.addEventListener ("load", runOnLoad, false);
      }
      scriptNode.type                         = "text/javascript";
      if (text)       scriptNode.textContent  = text;
      if (s_URL)      scriptNode.src          = s_URL;
      if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')("' + encodeURI(data) +'")';

      var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
      targ.appendChild (scriptNode);
  }
}

你需要// @grant GM_xmlhttpRequest ofcourse ..

答案 1 :(得分:0)

您尝试了ajax请求。

你错过了onload功能。

可以检索页面内容,就像您一样。但是,你无法通过这种方式浏览页面。

你可以尝试创建一个用户来覆盖window.location.replace,但它也可能有副作用。

unsafeWindow.location.replace = function () {};

它还取决于您使用的Greasemonkey版本。