繁体   English   中英

Greasemonkey欺骗用户代理

[英]Greasemonkey Spoof User Agent

在我访问的网站中,有一些代码可以检查用户代理,如果不是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");
}

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

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

但这没有用。

一种简单的方法是不为此使用GreaseMonkey,而使用在发送请求之前修改UserAgent的加载项。 如果检查是在服务器端进行的,则此操作将无效。

但是无论如何,您可以尝试Max 在这里的建议。

因此,如下所示:

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在这里解决了这个问题。 修改他的代码以满足您的需求,我得到了这个(适用于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当然。

您尝试了ajax请求。

您错过了onload函数。

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

您可以尝试创建一个用户脚本来覆盖window.location.replace ,但它也会产生副作用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM