在Youtube扩展程序上工作,并希望将其中的一部分带入Facebook,
我可以修改Facebook帖子中的Youtube iframe,但问题是它在每个网站都修改它,而不仅仅是在Facebook上。
所以我想知道如何设置特定的父窗口?
我希望有一种方法可以在manifest
文件中设置它,
否则我可以使用JS检查location.href
,因为它返回Facebook:
https://s-static.ak.facebook.com/common/referer_frame.php
目前在我的manifest
文件中:
"content_scripts": [
{
"matches": [
"*://*.facebook.com/*",
"*://*.youtube.com/embed/*"
],
"css": ["styles/facebook.css"],
"all_frames": true
}
]
答案 0 :(得分:3)
您可以通过location.ancestorOrigins
轻松找到父框架的域,即使在不同的域中也是如此。例如,使用以下清单文件:
"content_scripts": [{
"matches": [
"*://*.youtube.com/embed/*"
],
"js": ["js/facebook.js"],
"all_frames": true
}],
"web_accessible_resources": ["styles/facebook.css"],
以及以下JS:
// Note: parentOrigin could be `undefined` in the top-level frame.
var parentOrigin = location.ancestorOrigins[0];
if (parentOrigin === 'https://facebook.com' ||
parentOrigin === 'http://facebook.com') {
var style = document.createElement('link');
style.rel = 'stylesheet';
// NOTE: This only works because the file is declared at the
// web_accessible_resources list in manifest.json
style.href = chrome.runtime.getURL('styles/facebook.css');
(document.head || document.documentElement).appendChild(style);
}
如果YouTube视频是通过Iframe API嵌入的,您还可以尝试通过匹配网址在框架中插入样式。例如,在没有任何JavaScript的情况下,可以使用以下方式在YouTube框架中加载样式:
"content_scripts": [{
"matches": [
"*://*.youtube.com/embed/*origin=https://facebook.com/*",
"*://*.youtube.com/embed/*origin=http://facebook.com/*"
],
"css": ["styles/facebook.css"],
"all_frames": true
}]
答案 1 :(得分:0)
如果将内容脚本注入iframe和父框架,则可以(使用后台页面作为消息“router”)询问外部脚本。
使用:内容脚本可以learn their place in the frame hierarchy。
所以,逻辑是:
告诉我你是否需要任何这些步骤的帮助。