3

爲Chrome擴展程序創建清單文件時,有一個選項all_frames,允許將內容腳本注入到頂部框架/ iframe中,或者全部注入。如何在Chrome擴展中控制(i)幀深度,即注入內容腳本?

我希望此行爲在某些特定級別(例如2)停止。有沒有辦法指定它,最好是在清單上?或者至少在實際腳本中使用黑客?

的問題可以被翻譯成:「是否有可能知道一幀有多深是一個HTML文檔中

回答

4

您不能在清單中指定幀深度
但是,如果I幀有不同的URL?你可以(通過具有content_scripts陣列中的多個條目,在清單)運行鍼對他們不同的內容腳本

一個內容腳本可以通過編程確定與這樣的代碼的(I)幀的深度。

getFrameDepth (window.self); 

function getFrameDepth (winToID) { 
    if (winToID === window.top) { 
     return 0; 
    } 
    else if (winToID.parent === window.top) { 
     return 1; 
    } 

    return 1 + getFrameDepth (winToID.parent); 
} 



您可以針對this page at jsBin測試,如果您創建一個擴展如下:

manifest.json的:

{ 
    "manifest_version": 2, 
    "content_scripts": [ { 
     "all_frames":  true, 
     "js":    [ "iframe foo.js" ], 
     "matches":   [ "http://jsbin.com/enivux/*", 
           "http://jsbin.com/anomic/*", 
           "http://jsbin.com/ogaxoq/*", 
           "http://jsbin.com/ihegaq/*" 
          ] 
    } ], 
    "description":  "Detecting where an iframe is in the hierarchy", 
    "name":    "(i)frame Level identification", 
    "version":  " 1" 
} 


iframe的富。 js:

var frameDepth = getFrameDepth (window.self); 
var bodyColors = ["white", "pink", "lime", "cyan"] 

document.body.style.background = bodyColors[frameDepth]; 

function getFrameDepth (winToID) { 
    if (winToID === window.top) { 
     return 0; 
    } 
    else if (winToID.parent === window.top) { 
     return 1; 
    } 

    return 1 + getFrameDepth (winToID.parent); 
} 



注意,Chrome擴展將目前only run on iframes with a src attribute,只有當網址符合清單的匹配和水珠的要求。

+0

謝謝,我真的希望有一個解決方案的清單,但沒關係! – zabetak

相關問題