2011-11-03 26 views
8

Quiero inyectar algo de HTML en algunos sitios web con una extensión de Chrome, y sería mucho mejor usar un sistema de plantillas como Mustache.js para hacerlo. Sin embargo, no puedo entender cómo acceder al contenido del archivo de la plantilla. Un ejemplo de lo que estoy tratando de hacer:Renderizar plantillas de Moustache.js en una extensión de Chrome

content_script.js

var image = chrome.extension.getURL('logo.jpg'); 
var tb = Mustache.to_html(
    chrome.extension.getURL('template.html'), 
    { 
     "imageURL": image, 
     "num": 5 
    } 
); 
$('body').prepend(tb); 

template.html

<div id="topbar"> 
    <img src="{{imageURL}}"></img> 
    {{num}} 
</div> 

La imagen aparece muy bien, como era de esperar. Y por lo tanto la carga de template.html sólo devuelve la cadena siguiente: chrome-extension://badmldhplgbmcbkolbmkhbamjaanjejj/template.html

¿Cómo consigo el contenido de mi archivo de plantilla como una cadena?

Gracias a Boris Smus para la solución

content_script.js

var req = new XMLHttpRequest(); 
req.open("GET", chrome.extension.getURL('template.html'), true); 
req.onreadystatechange = function() { 
    if (req.readyState == 4 && req.status == 200) { 
     var image = chrome.extension.getURL('logo.jpg'); 
     console.log('Rendering Mustache.js template...'); 
     var tb = Mustache.to_html(
      req.responseText, 
      { 
       "imageURL": image, 
       "num": 5 
      } 
     ); 
     $('body').prepend(tb); 
    } 
}; 
req.send(null); 

Respuesta

7

chrome.extension.getURL(file) devuelve la URL absoluta del archivo solicitado, y no su contenido. Debería hacer un XHR en la plantilla para obtener su contenido.

O bien, almacene los contenidos de su plantilla en su propio HTML usando algo como <script id="templ" type="text/x-template">...</script>, y luego haga referencia al contenido de la plantilla a través del document.getElementById('templ').

Cuestiones relacionadas