Mensaje síncrono que pasa en las extensiones de Chrome

Estoy intentando bloquear un file de script para que no se cargue en sitios web definidos por el usuario. Para bloquear un file de script, estoy usando beforeload event y event.preventDefault(); en el script de contenido que funciona bien, siempre y cuando ya conozca la list de sitios web. Mi problema es que no conozco la list de sitios web por adelantado, por lo que para get la list de sitios web, estoy enviando una request a la página de background, pero la respuesta es asincrónica e inutilizable.

¿Hay algún post síncrono que pase en las extensiones de Chrome que posiblemente haya omitido en los documentos de Google?

 // my (simplified) code from content script: document.addEventListener("beforeload", function(event) { chrome.extension.sendRequest({fnc:"is_owner"}, function(response) { // asynchronous response is not usable because // all scripts have already been loaded if (response.is_owner) event.preventDefault(); }); }, true); 

Desafortunadamente no hay. Se ha abierto un informe de error acerca de la falta de posts sincrónicos, tal vez si suficientes personas lo protagonizan, hagan algo al respecto.

Puede usar la API de files HTML5 (navigator.webkitTemporaryStorage o la window obsoleta más antigua.webkitStorageInfo con la opción TEMPORARY) para almacenar configuraciones en un file. Esta parte es asincrónica, pero puede hacerlo desde el background o desde la página de opciones o window emergente. Esta API puede cambiar en ti ya que aún no está estandarizada. Debido a que es un almacenamiento temporal, es posible que su página de background deba ejecutarse persistentemente para evitar que Chrome elimine el file.

Luego, desde su script de contenido puede usar XMLHttpRequest sincrónico para get el file de "filesystem:" + chrome.extension.getURL ("temporary /" + filename). El prefijo "filesystem:" en la url es bastante importante.

La mejor opción es usar la API chrome.storage (o localStorage) para su configuration y enganchar el evento onChanged para actualizar el file temporal. Si necesita volver a cargar la página después de cambiar una configuration, querrá hacer eso en la callback de la operación de escritura FileSystem para que sepa que el script de contenido puede ver el cambio.

No requiere ningún permiso especial en el manifiesto. Personalmente he probado esto en Chrome 35, pero sé que también funcionó en versiones anteriores. Sin embargo, no conozco el requisito de versión mínima. Recuerdo haber visto mencionar una regresión relacionada con el cambio de security en Chrome 33, donde no funcionó, pero se solucionó rápidamente.

He visto otras soluciones (por ejemplo, networkingirigir a blob url o uri de datos de onBeforeWebRequest) para get configuraciones en secuencias de commands de contenido antes de que se ejecuten las secuencias de commands de la página, pero hasta donde sé, se han roto intencionalmente en versiones recientes de Chrome debido a XSS general y mejoras de security de extensión.