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') + '&params='

Примеры заявителя 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") + "&params=",
     /*...*/
}
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") + "&params=";
     }
     /*...*/,
     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();
}
Другие вопросы по тегам