亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript - 重新加載 iframe 內容后獲取 iframe 的 URL

javascript - 重新加載 iframe 內容后獲取 iframe 的 URL

素胚勾勒不出你 2021-10-14 13:00:22
我正在開發一個相位游戲,該游戲將通過 iframe 嵌入到網站中。該游戲支持多種語言,因此我們已經開始使用訪問該游戲的站點作為指標(phaser-game.com/ru 將使用俄語,phaser-game.com/ar 將使用阿拉伯語等) .這是到目前為止的代碼(通過window.addEventListener('load', getDomainSetLanguage);以下方式觸發:function getDomainSetLanguage(){    let url = (window.location !== window.parent.location) ? document.referrer : document.location.href;    console.log('url = ' + url);    for (let i = 0; i < COUNTRIES_DOMAIN.length; i++)    {        if (url.indexOf(COUNTRIES_DOMAIN[i].URL) >= 0)        {            DOMAIN_ID = COUNTRIES_DOMAIN[i].ID;            LANGUAGE_ID = COUNTRIES_DOMAIN[i].LANGUAGE_ID;            break;        }    }    if (DOMAIN_ID === -1)    {        DOMAIN_ID = 1;    }    if (LANGUAGE_ID === -1)    {        LANGUAGE_ID = 1;    }    console.log('DOMAIN_ID = ' + DOMAIN_ID + "; LANGUAGE_ID = " + LANGUAGE_ID);}現在這在表面上工作正常。但是,游戲確實會時不時地觸發重新加載,并且當游戲返回時,它現在會獲得自己的 URL,而不是父級 / iframe 的 URL。這是游戲語言默認為英語的結果。請注意,這僅發生在 Chrome 和 Safari 中。FireFox 工作得很好。有什么我想念的嗎?或者還有什么我可以嘗試的嗎?我試過記錄document.referrerand的值document.location.href,但我只是收到有關權限和內容的瀏覽器錯誤,游戲默認為英語。我從這里讀到Chrome(可能還有 Safari)不會觸發 iframe 中對象的 onload 功能,但我不確定這是否適用于我,因為我有很多其他與 onload 相關的功能可以工作.需要說明的是,我無法修改iframe本身,因此任何解決方案都必須來自游戲本身。
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

let url = (window.location !== window.parent.location) ? document.referrer : document.location.href;

代碼中的這一行使得當您在 iframe 中時,document.referrer用作確定語言的 URL。


根據Document.referrer 上的MDN 頁面:


該Document.referrer屬性返回鏈接到此頁面的頁面的 URI。


在 內<iframe>,Document.referrer最初將設置為與href父窗口的相同的值Window.location。


這意味著它可以在初始加載時正常工作,正如您所經歷的那樣。據我所知,規范并沒有明確說明如何處理重新加載。這可能是瀏覽器行為差異的原因。認為重新加載后它應該是空的并不是太瘋狂,因為當時它不是從父頁面加載的。


另一種解決方案是使用window.parent.location.href,它始終引用iframe父窗口的 URL (在 document.referrer 和 window.parent.location.href 之間的區別中閱讀更多內容)。


您的代碼行可能如下所示:


// if parent and child href are equal, using either yields the same result

// if there is no parent, window.parent will be equal to window

// therefore, the conditional statement isn't necessary 

let url = window.parent.location.href;


查看完整回答
反對 回復 2021-10-14
  • 1 回答
  • 0 關注
  • 627 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號