[英]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.