9

location.hrefブラウザのアドレスバーに存在する完全な URL を取得するために使用しています。
詳細を説明するために、当社のサービスにはお客様のサイトに含まれる js ファイルがあることに注意してください。したがって、この JS ファイルは、申請者の完全な URL を生成します。

この URL は、実際のドメインにリダイレクトされた以前の 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') + '&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のとおりです。
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#scso=uid_WB6ZrwAGHJ0KLAXLjA8j8w_10:2120,uid_WB6aQQAGpZkKLNwAFPmn0: 2120年

4

2 に答える 2

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") + "&params=",
     /*...*/
}
my_obj.init();

このようにするということurlは、.js ファイルがロードされるときに実際に値が設定されることを意味します。

古いバージョンの 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") + "&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();
}
于 2016-11-15T11:16:08.853 に答える