簡體   English   中英

定義跨域屬性

[英]Define a Cross-origin Property

TL; DR:是否可以在父窗口上定義跨域屬性以充當子窗口可訪問的標志?

我有一個可以在iframe或頂級瀏覽上下文中運行的JavaScript應用程序。 在iframe中時,應用程序將嘗試使用window.postMessage在父窗口中查詢功能。 此功能可能不存在,因此我封裝了window.postMessage並實現了超時。 但是,超時時間必須很長,如果功能不存在,這會對加載時間產生負面影響。 是否可以在父窗口上定義跨域屬性以充當替換超時的標志?

var parent = window.parent;
if (parent && parent.hasFeature) {
    window.postMessage(...);
    return;
}
...

我沒有看到Object.defineProperty的訪問描述符提供的任何支持,並且看起來跨域屬性描述符映射是內部的。

我找不到在窗口上定義跨域屬性的方法。 我認為這不可能。 但是,我確實發現了三種在不使用Web請求或postMessage的情況下在具有不同來源的窗口之間傳遞數據的方法。

  1. 如果父母控制了孩子的位置,則將數據作為孩子要檢查的查詢參數。 注意,該參數也將傳遞給服務器。 請參見以下示例。

    http://host/index.html?flag = 1

  2. 如果父母控制了孩子的位置,則將數據作為孩子要檢查的哈希片段。 這比查詢參數更合適,因為散列片段旨在用於客戶端數據。 但是,如果客戶端使用哈希片段進行導航,則可能不是一個選擇。

    http://host/index.html#flag = 1

  3. 包括數據作為iframe名稱 iframe的初始名稱定義嵌入式瀏覽上下文的名稱,子級可以使用window.name對其進行訪問。 但是,這不是window.name的預期用途,並且可能會被其他功能破壞。

     <iframe name="flag=1" src="http://host"></iframe> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM