在我访问的网站中,有一些代码可以检查用户代理,如果不是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': '*/*',
},
});
但它不起作用。
答案 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版本。