2013-12-02 3 views
0

Я создаю аддон Firefox Jetpack, который извлекает данные для открытого URL-адреса в закладке API. API возвращает данные в формате JSON. Затем я использую эти данные для создания тегов HTML с целью их хорошего отображения. Затем я вставляю этот HTML-файл из файла сценария в тело открытого сайта. Это работает отлично, но когда я отправил приложение в магазин Firefox для просмотра, он был отклонен из-за неанализированных данных.Как очистить скрипт перед инъекцией в тело

Если я дезинфицирую его, он отображает простой HTML в инъекции. В созданном документе у меня нет меток < script, но я использую функцию onclick для нескольких ссылок внутри введенного скрипта. Вот пример кода, чтобы получить представление о том, чего я пытаюсь достичь.

Main.js

// It gets data in JSON format 
// I share this data with content script in an object 
tab = tab.attach({ 
      contentScriptFile: [require("sdk/self").data.url("jquery.min.js"), 
           require("sdk/self").data.url("contentscript.js")] 
        }); 
tab.port.emit('data', JSON.parse(JSON_STRING)); 

contentscript.js

// I get data from main.js and then make an html 
// then I inject it to the opened document 
self.port.on('data', function(obj) { 
content = '<div id="test"><a href="http://www.example.com/'+obj.page+'" onclick="javascript: document.getElementById(\'test\').style.display="none">Visit</a></div>'; 
$('body').append(content); 

}); 

Я также использовать стили CSS в расширении.

Любое решение для дезинфекции, не нарушая функциональность? Спасибо

ответ

0

Я использовал функцию escapeHTML() с веб-сайта Mozilla, и она решила мою проблему. Вот код и его использование:

var url = 'http://www.example.com'; // any internal/external variable 
var content = '<div id="main_extension"><a href="'+escapeHTML(url)+'">Click Me</a></div>'; 

function escapeHTML(str) str.replace(/[&"<>]/g, function (m) escapeHTML.replacements[m]); 
escapeHTML.replacements = { "&": "&amp;", '"': "&quot;", "<": "&lt;", ">": "&gt;" }; 

Мое расширение получило одобрение с использованием этого метода. Однако вы можете использовать и другие методы, если вы используете jQuery DOM или любой другой для инъекции данных. Источник: https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion

Смежные вопросы