簡體   English   中英

從 iframe(同一域)中獲取 iframe(節點)的實例

[英]getting instance of iframe (node) from within iframe (same domain)

我有一種情況,我需要知道代碼是從哪個 iframe 實例運行的。 “父”文檔本身是由代碼生成的,我無法訪問生成它的機制(並且它會定期重新生成)。 我的文檔在頁面上的多個iframe 中多次加載,在不同的位置(iframe 不是兄弟)。 我希望腳本的每個實例都能夠訪問加載該腳本實例的 iframe 節點。

這是粗略的想法。 對於每個“a.html”的運行代碼,我希望它知道它正在運行的 iframe ELEMENT。

在此處輸入圖像描述

在本例中,將有從“a.html”運行的相同代碼的三個實例。 我希望能夠查看父文檔(我可以 - 這不是跨域問題)並找出 iframe 的 ID 或其他一些動態分配的屬性 - 所以我需要 iframe 本身的 ELEMENT 參考.

詢問 iframe 的“父”元素不會通知父 javascript 實例哪個元素正在執行該請求 AFAIK。 在那兒?

我不能只迭代所有 iframe 並查找我的頁面已知來源“a.html”,因為同一路徑的多個實例以及與我無關的其他 iframe - IFRAME 是當前執行語境?

我不能做的事情:

  1. 修改父頁面
  2. 修改 iframe URL,包括名稱或使用搜索參數
  3. 在 iframe 上指定 id 或數據集值。

我能做的事情:

  1. 修改子 iframe 的內容

我目前唯一的方法是讓“a.html”生成一個(希望是)唯一值並將其存儲在文檔中,然后要求父上下文迭代所有 iframe 並在子上下文中尋找該值,然后當它匹配將有正在調用請求的節點。

想法?

所以我學到了一些東西。

  1. javascript 中似乎沒有辦法“知道”哪個 iframe 觸發了事件。 console.trace()不會告訴您腳本在其中執行的 dom 上下文,即使其中一些在一個文檔中執行,而另一個 function 在父文檔中執行。
  2. 像往常一樣,我試圖查看腳本在哪個節點內執行,或者事件來自哪里,而不是識別我已經知道的內容 - window 名稱屬性(幸運的是,這在我的情況下是唯一的)和 dom 節點。 迭代父母 iframe,直到它與我需要的匹配。

在子 iframe (a.html) 內:

const n = window.name; // 'window' is the iframe document a.html
window.parent.getIframe = function (name) {
    // in the context of the function, 'this' is the parent 'window' element.
    const iframes = this.document.getElementsByTagName('iframe');
    for (let i = 0; i < iframes.length; i++) {
        if (iframes[i].name == name) {
            return iframes[i];
        }
    }
    return null;
}
const frame = window.parent.getIframe(n);
let prop = frame.dataset.someValue ... etc

暫無
暫無

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

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