Pregunta sobre greasemonkey, javascript, google-chrome, iframe, userscripts – Error de la escritura de usuario de Chrome: "Intento de JavaScript no seguro para acceder al marco"

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";

Ejecutando en un script de usuario para esta url:http://www.free-tv-video-online.me/player/sockshare.php?id=24DA6EAA2561FD60

¿Por qué sale Chrome con este error y falla la secuencia de comandos ?:

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.

(Solo soy un usuario básico de Javascript)

Código final, muchas gracias al contestador:

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

Tu respuesta

2   la respuesta
1

su navegador no le permitirá acceder a javascript en un iframe desde otro dominio.

Vea la respuesta superior aquí:

jQuery cross domain iframe scripting

Sin esperar que tus usuarios hagan eso, ¿verdad? Sherms
stackoverflow.com/a/6083677/1053937 - Encontré una manera de deshabilitar esa opción de seguridad :) J.B.
Oh ya veo. Entendí mal el error (y las otras explicaciones de ello). De alguna manera lo has hecho más fácil de entender :) J.B.
Esta respuesta no es correcta para usuarios. Tienen un mecanismo para evitar esta restricción de dominio cruzado, ysin comprometer la seguridad. Brock Adams
Rhodesian, como dije para unscript de usuario J.B.
13

rame, que está en un dominio diferente, por razones de seguridad.sin embargo, esto de ninguna manera detiene los scripts en Chrome, Tampermonkey o Greasemonkey.

Puede procesar el contenido de iframed en un script de usuario porque Chrome (y Firefox) procesan las páginas de iframe como si fueran la página principal. Teniendo en cuenta eso, el scripting de tales páginas es muy fácil.

Por ejemplo, supongamos que tiene esta página endomain_A.com:

<html>
<body>
    <iframe src="http://domain_B.com/SomePage.htm"></iframe>
</body>
</html>


Si configura su@match Directivas como esta:

// @match http://domain_A.com/*
// @match http://domain_B.com/*

Luego, su secuencia de comandos se ejecutará dos veces, una en la página principal y otra en el iframe como si fuera una página independiente.

Así que si tu guión fuera así:

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

Vería la página principal en verde lima y la página de marco en rosa.


Alternativamente, puedes probar así:

if (window.top === window.self) {
    //--- Code to run when page is the main site...
}
else {
    //--- Code to run when page is in an iframe...
}


Como descubrió (por comentario en otra respuesta), puedeDeshabilita la misma política de origen en Chrome.. ¡No hagas esto! Te dejarás abierto a todo tipo de chanchullos creados por gente mala. Además de los sitios malos, muchos sitios nominalmente "buenos", que permiten a los usuarios publicar contenido, podrían rastrearlo, piratearlo o falsificarlo.

De nada; ¡encantado de ayudar! Brock Adams
Oh wow, eso funcionó perfectamente. Pongo mi código final en el OP, ¡gracias! J.B.

Preguntas relacionadas