Estoy en el proceso de crear mi primera extensión de Safari, una muy simple, pero me he encontrado con un par de problemas. La extensión se reduce a una única secuencia de comandos inyectada que intenta eludir el controlador de fuente nativo y redirigir a un URI http: //. Mis problemas hasta ahora son dobles:Preguntas de extensión de Safari
- La "lista blanca" no funciona de la manera que esperaría. Dado que todos los feeds se muestran bajo el protocolo "feed: //", intenté capturar eso en la lista blanca como "feed: // */*" (sin nada en la lista negra), pero termino en una solicitud loop que no puedo entender Si configuro lista negra valores de "http://*/*" y "https://*/*", todo funciona como se esperaba.
- No puedo encontrar la manera de acceder a mi configuración desde mi script insertado. La secuencia de comandos crea un controlador de eventos
beforeload
, pero no puede acceder a mi configuración mediante la rutasafari.extension.settings
indicada en la documentación.
No he encontrado nada en la documentación de Apple que indique que la configuración no debería estar disponible en mi script. Dado que las extensiones son una característica tan nueva, incluso Google arroja resultados relevantes limitados y la mayoría proviene de la documentación oficial.
¿Qué me estoy perdiendo?
Gracias.
ACTUALIZACIÓN así que espero que la documentación es incompleta porque es limítrofe abismal, pero he aprendido un poco acerca de la configuración. Resulta que, a partir de scripts de inyección, el objeto SafariExtensionSettings
no está disponible. Los scripts de inyección solo tienen acceso al objeto SafariContentExtension
(que no es útil en absoluto), pero tiene un alias exactamente de la misma manera (safari.extension.settings
) - mala idea, IMO. Como se indica en la injection script documentation:
Importante: Cuando se utiliza safari.extension desde dentro de un script inyectado, no se está dirigiendo a la clase SafariExtension. Te estás dirigiendo a la clase SafariContentExtension.
Debe usar el sistema de mensajería para hablar con un archivo HTML global que tenga acceso a la configuración. Es un poco raro, pero tengo un mensaje que se envía a un archivo global.html
que recupera la configuración y enviará un mensaje a mi script de inyección tan pronto como sepa cómo hacerlo.
Como estoy haciendo todo mi trabajo antes de cargar el documento, todos los métodos que he encontrado para enviar el mensaje atrás dependen de un objeto de página que no tengo.
Eche un vistazo a las actualizaciones que he agregado anteriormente. Ahora sé por qué no puede acceder a las configuraciones e incluso ha indicado cómo llegar a ellas (a pesar de que no funciona para mí por otros motivos). –
Acabo de encontrar una solución para mi problema, se publicó anteriormente para usted o cualquier otra persona con el mismo problema. ¡Tal vez puedas adaptarlo para tu caso! – Mars
Gracias por la actualización. En mi caso, todo el trabajo se está realizando 'beforeload', por lo que el objeto de la página no está definido, lo que parece significar que el método' dispatchMessage() 'no está disponible. Todavía estoy buscando una solución a eso. –