incompatible extensiones español bloqueado safari safari-extension

extensiones - safari en windows



Extensión de Safari: demasiadas secuencias de comandos inyectadas que responden al mensaje (2)

Intento codificar una extensión de safari similar a Bubble Translate para Chrome.

cuando hace clic en un botón en la barra de herramientas, traduce automáticamente el texto seleccionado actualmente al idioma de su elección utilizando la API de idioma de Google.

Utilizo el siguiente script inyectado para obtener el texto resaltado y mostrar el resultado (como una alerta por el momento): http://pastebin.com/bYVuQAmp

Utilizo el siguiente script global para invocar el script inyectado si es necesario: hxxp: //pastebin.com/VHaAKM5a

El problema que tengo es el siguiente:

El script no solo se inserta en la página principal, sino también en anuncios y elementos similares que están incrustados en la página. Debido a eso, el texto seleccionado se traduce varias veces porque todos los scripts incrustados en una página responden al mensaje.

¿Cómo puedo asegurarme de que la secuencia de comandos se inyecta solo en la página correcta o solo responde la página correcta?

Gracias,

Philipp


Quizás puedas comprobar que la página en la que se ha insertado el guión no está dentro de un marco:

if (window == window.parent) { /* you''re not inside a frame! */ }

No estoy seguro de si funciona desde dentro de las etiquetas <object> incrustan HTML. Lo más probable es que sí.


Cuando la secuencia de comandos global responde al mensaje del script inyectado, incluya la url de la pestaña de destino en el mensaje de respuesta, de esta manera:

var message = { translation: result.translation, url: event.target.url } event.target.page.dispatchMessage("displayTranslation", message);

Luego, en el manejador de mensajes del script inyectado, verifique que la url pasada en el mensaje coincida con la url de la página, así:

if (event.name === "displayTranslation" && event.message.url === window.location.href) { alert(event.message.translation); }

De esa manera, solo el guión en el marco que originó la solicitud actuará en la respuesta.