3
爲Chrome擴展程序創建清單文件時,有一個選項all_frames
,允許將內容腳本注入到頂部框架/ iframe中,或者全部注入。如何在Chrome擴展中控制(i)幀深度,即注入內容腳本?
我希望此行爲在某些特定級別(例如2)停止。有沒有辦法指定它,最好是在清單上?或者至少在實際腳本中使用黑客?
的問題可以被翻譯成:「是否有可能知道一幀有多深是一個HTML文檔中
爲Chrome擴展程序創建清單文件時,有一個選項all_frames
,允許將內容腳本注入到頂部框架/ iframe中,或者全部注入。如何在Chrome擴展中控制(i)幀深度,即注入內容腳本?
我希望此行爲在某些特定級別(例如2)停止。有沒有辦法指定它,最好是在清單上?或者至少在實際腳本中使用黑客?
的問題可以被翻譯成:「是否有可能知道一幀有多深是一個HTML文檔中
您不能在清單中指定幀深度
但是,如果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,只有當網址符合清單的匹配和水珠的要求。
謝謝,我真的希望有一個解決方案的清單,但沒關係! – zabetak