Я сделал расширение Chrome, которое загружает мою страницу с новой вкладкой с помощью моей страницы подписки на YouTube (я обошел проблему X-frame-options
) и хочу выделить конкретный элемент документа, #content
, если быть точным (это подписка). Вычитает ли это все, что есть :not(#content)
, или вырезать #content
и положить его в другой <div>
. Вот мой код:Предоставить доступ к расширению Chrome для содержимого iframe
Background.html
<html>
<head>
<script type="text/javascript" src="jquery-2.2.0.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="window.js"></script>
</head>
<body>
<iframe id="left" name="left"></iframe>
<div id="canvas"></div>
</body>
</html>
Window.js
$(document).ready(function(){
var $left = $('#left');
$left.on('load', function() {
$(this).contents().find('#content').clone().appendTo('#canvas');
});
$left.attr('src', 'https://www.youtube.com/feed/subscriptions');
});
script.js
chrome.webRequest.onHeadersReceived.addListener(
function(info) {
var headers = info.responseHeaders;
for (var i = headers.length - 1; i >= 0; --i) {
var header = headers[i].name.toLowerCase();
if (header == 'x-frame-options' || header == 'frame-options') {
headers.splice(i, 1); // Remove header
}
}
return {
responseHeaders: headers
};
}, {
urls: ['*://*/*'], // Pattern to match all http(s) pages
types: ['sub_frame']
}, ['blocking', 'responseHeaders']
);
manifest.json
{
"manifest_version": 2,
"version": "1.0",
"background": "background.html",
"chrome_url_overrides" : {
"newtab": "background.html"
},
"permissions": [
"background",
"contextMenus",
"webRequest",
"webRequestBlocking",
"tabs",
"<all_urls>"
]
}
Как это прямо сейчас, загружает на YouTube, но я не могу ухватить документа в , как это вход ошибку:
Uncaught SecurityError: Failed to read the 'contentDocument' property from
'HTMLIFrameElement': Blocked a frame with origin "chrome-extension://ID" from
accessing a frame with origin "https://www.youtube.com". The frame requesting
access has a protocol of "chrome-extension", the frame being accessed has a
protocol of "https". Protocols must match.
Я пытаюсь получить этот div#content
, выделенный для удобства навигации с моей новой закладки. Я видел решения, которые предлагают использовать "all_frames":true
в файле manifest.json
, но это, похоже, не решает проблему. Есть идеи? Благодаря!
См. Также http://stackoverflow.com/q/8917593/32453 – rogerdpack