Вопрос по iframe, javascript – Ошибка пользовательского скрипта Chrome: «Небезопасная попытка JavaScript получить доступ к фрейму»
// the iframe of the div I need to access
var iframe = document.getElementsByTagName("iframe")[2];
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
// resize 'player' in the iframe
innerDoc.getElementById('player').width = "1000px";
innerDoc.getElementById('player').height = "650px";
Выполнение в usercript для этого URL:http://www.free-tv-video-online.me/player/sockshare.php?id=24DA6EAA2561FD60
Why does Chrome come out with this error and fail the script?:
Unsafe JavaScript attempt to access frame with URL http://www.sockshare.com/embed/24DA6EAA2561FD60
from frame with URL http://www.free-tv-video-online.me/player/sockshare.php?id=24DA6EAA2561FD60.
Domains, protocols and ports must match.
(I'm only a basic Javascript user)
Итоговый код, большое спасибо ответчику:
// ==UserScript==
// @name Resize
// @include http://www.free-tv-video-online.me/player/sockshare.php*
// @include http://www.sockshare.com/*
// ==/UserScript==
if (!(window.top === window.self)) {
var player = document.getElementById('player');
setSize(player);
}
function setSize(player) {
player.style.setProperty("width", "1000px");
player.style.setProperty("height", "650px");
}
туп к JavaScript в iframe из другого домена.
Смотрите верхний ответ здесь:
что обычный javascript не может получить доступ к контенту iframe, который находится в другом домене, по соображениям безопасности.Howeverэто никоим образом не останавливает пользовательские скрипты в Chrome, Tampermonkey или Greasemonkey.
Вы можете обрабатывать контент iframed в пользовательском сценарии, потому что Chrome (и Firefox) обрабатывают страницы iframe так же, как если бы они были главной страницей. Учитывая это, создание сценариев для таких страниц совсем несложно.
Например, предположим, что у вас есть эта страница наdomain_A.com:
<html>
<body>
<iframe src="http://domain_B.com/SomePage.htm"></iframe>
</body>
</html>
Если вы установите свой@match
директивы как это:
// @match http://domain_A.com/*
// @match http://domain_B.com/*
Затем ваш сценарий будет выполняться дважды - один раз на главной странице и один раз на iframe, как если бы это была отдельная страница.
Так что, если ваш сценарий был такой:
// ==UserScript==
// @name _Test iFrame processing in Chrome and Tampermonkey
// @match http://domain_A.com/*
// @match http://domain_B.com/*
// ==/UserScript==
if (/domain_A\.com/i.test (document.location.href) ) {
//Main page
document.body.style.setProperty ("background", "lime", "important");
}
else {
//iFrame
document.body.style.setProperty ("background", "pink", "important");
}
Вы увидите главную страницу светло-зеленого цвета, а страницу в рамке - розовым.
Кроме того, вы можете проверить, как это:
if (window.top === window.self) {
//--- Code to run when page is the main site...
}
else {
//--- Code to run when page is in an iframe...
}
Как вы обнаружили (за комментарий к другому ответу), вы можетеотключить ту же политику происхождения в Chrome. Don't do this! Вы оставите себя открытым для всех видов махинаций, созданных плохими людьми. Помимо злых сайтов, многие номинально «добры» сайты, которые позволяют пользователям публиковать контент, могут потенциально отслеживать, взламывать или подделывать вас.