location.href возвращает странный URL
Я использую location.href
чтобы получить полный URL существует в адресной строке браузера.
Чтобы предоставить более подробную информацию, важно отметить, что у нашего сервиса есть файл js, который будет включен в сайты наших клиентов. Таким образом, этот файл JS будет генерировать полный URL-адрес заявителя.
Я думал, что этот URL каким-то образом является предыдущим URL, который перенаправлен на реальный домен, но как мне предотвратить это действие?
Строка кода JS, которая сгенерирует ссылку для атрибута src iframe:
'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
...
иногда странный URL, созданный location.href
и я не знаю, в чем причина. Например:
Главный URL-адрес выглядит примерно так: http://saten.ir/tag/%D8%A8%DB%8C%D9%88%DA%AF%D8%B1%D8%A7%D9%81%DB%8C-%D8%A7%D9%85%DB%8C%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3-%D9%81%D8%AE%D8%B1%D8%A2%D9%88%D8%B1/
Но URL возвращается location.href
как показано ниже:
http://www.google.com/search?site=&source=hp&ei=mpkeWIvHKYWbsgGtxaSQBg&q=%D8%A7%D9%85%D9%8A%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3+%D9%81%D8%AE%D8%B1%D8%A7%D9%88%D8%B1&oq=%D8%A7%D9%85%D9%8A%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3+%D9%81%D8%AE%D8%B1%D8%A7%D9%88%D8%B1&gs_l=mobile-gws-hp.3...4752.15339.0.16567.0.0.0.0.0.0.0.0..0.0....0...1c.1.64.mobile-gws-hp..0.0.0.UFWL1tf4KDM
2 ответа
Попробуй сделать это
var myurl = location.origin + decodeURIComponent(location.pathname);
в принципе то же самое, что и location.href но оно должно работать
На самом деле я не смог воспроизвести ошибку, во всех тех немногих тестах, которые я проводил, ваш код получил правильное расположение. 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();
Это означает, что url
фактически заполняется при загрузке файла.js.
То, что вы получаете, это определенно реферер, например, если в старых версиях браузера Android вы действительно загружаете скрипт до изменения location.href, или происходит какая-то предварительная выборка (например, браузер загружает материал со следующей страницы перед тем, как перейти к следующая страница) продолжается.
Получение location.href после загрузки dom должно быть лучше. Вы можете проверить, в каком состоянии вы находитесь, прежде чем получить 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();
}