我使用location.href
来获取浏览器地址栏中存在的完整网址
为了提供更多细节,请务必注意我们的服务有一个将包含在我们客户站点中的js文件,这一点非常重要。所以这个JS文件将生成申请人的完整URL。
我认为这个网址是以前的网址重定向到真实域名,但我应该如何阻止此操作?
将为iframe的src属性生成链接的JS代码行是:
'http://sd.domain.ir/index.php?r=' + Math.floor(Math.random() * (100000000 - 0 + 1)) + 0 + '&ref=' + ((window.btoa) ? btoa(location.href) : 'ie') + '&responsive=' + ((document.querySelector('meta[name="viewport"][content*="width=device-width"]')) ? 'yes' : 'no') + '¶ms='
申请人UA的例子:
Mozilla\/5.0 (Linux; U; Android 4.3; en-us; HUAWEI G620-L72 Build\/HuaweiG620-L72) AppleWebKit\/534.24 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.24 T5\/2.0 bdbrowser\/6.1.0.4
Mozilla\/5.0 (Linux; U; Android 4.4.3; en-ae; HTC_One Build\/KTU84L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30
Mozilla\/5.0 (Linux; U; Android 4.3; en-us; GT-I9300 Build\/JSS15J) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30
...
有时由location.href
生成的奇怪网址,我不知道是什么原因。例如:
答案 0 :(得分:2)
尝试这样做
SET FOREIGN_KEY_CHECKS = 0;
与location.href基本相同,但它应该有效
答案 1 :(得分:0)
我实际上无法重现该错误,在我执行的所有少数测试中,您的代码都获得了正确的location.href。
我能想到的唯一问题就是你在建立班级时创建链接。
var my_obj = {
/*...*/
url: "http://sd.domain.ir/index.php?r=" + Math.floor(Math.random() * (1e8 + 1)) + "0&ref=" + (window.btoa ? btoa(location.href) : "ie") + "&responsive=" + (document.querySelector('meta[name="viewport"][content*="width=device-width"]') ? "yes" : "no") + "¶ms=",
/*...*/
}
my_obj.init();
这样做意味着在加载.js文件时实际填充了url
。
你得到它肯定是一个推荐者,就像在旧版本的android浏览器中你实际上在location.href更改之前加载脚本,或者有某种预取(比如浏览器加载来自下一页的内容)实际上要进入下一页)。
加载dom后获取location.href应该更好。您可以尝试在获取href之前检查您所处的状态:
var my_obj = {
init: function(){
my_obj.url = "http://sd.domain.ir/index.php?r=" +Math.floor(Math.random() * (1e8 + 1)) + "0&ref=" + (window.btoa ? btoa(location.href) : "ie") + "&responsive=" + (document.querySelector('meta[name="viewport"][content*="width=device-width"]') ? "yes" : "no") + "¶ms=";
}
/*...*/,
url: ""
}
if(document.readyState == "uninitialized" || document.readyState == "loading " || document.readyState == "loaded"){
document.onreadystatechange = function(){
if (document.readyState == "interactive") {
my_obj.init();
}
}
}else{
my_obj.init();
}