Вопрос по iframe, javascript – Ошибка пользовательского скрипта Chrome: «Небезопасная попытка JavaScript получить доступ к фрейму»

4
// 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");
}

Ваш Ответ

2   ответа
1

туп к JavaScript в iframe из другого домена.

Смотрите верхний ответ здесь:

JQuery междоменный сценарий iframe

Этот ответ не является правильным для пользовательских скриптов. У них есть механизм, чтобы обойти это междоменное ограничение, иwithout компрометация безопасности.
Не ожидая, что ваши пользователи сделают это, хотя вы?
Родезийский, как я уже сказал, это дляuserscript J.B.
О, я вижу. Я неправильно понял ошибку (и другие объяснения для нее). Вы как-то упростили понимание :) J.B.
stackoverflow.com/a/6083677/1053937 - нашел способ отключить эту опцию безопасности :) J.B.
13

что обычный 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!  Вы оставите себя открытым для всех видов махинаций, созданных плохими людьми. Помимо злых сайтов, многие номинально «добры» сайты, которые позволяют пользователям публиковать контент, могут потенциально отслеживать, взламывать или подделывать вас.

Ого, это сработало отлично. Поместите мой окончательный код в ОП, пожалуйста, спасибо! J.B.
Добро пожаловать; рад помочь!

Похожие вопросы