我正在创建一个Firefox jetpack插件,它从API中获取选项卡中打开的URL的数据。 API以JSON格式返回数据。然后,我使用该数据创建HTML标记,以便很好地显示它。然后我将内容脚本文件中的HTML注入打开的站点的主体。这很好用但是当我将应用程序提交到Firefox商店进行审核时,由于未经过数据处理而被拒绝了。
如果我清理它,它会在注射中显示纯HTML。我没有<脚本>在创建的文档中的标签,但我使用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 :(得分:0)
我使用过Mozilla网站的escapeHTML()函数,它解决了我的问题。这是代码及其用法:
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 = { "&": "&", '"': """, "<": "<", ">": ">" };
我的扩展使用此方法获得批准。但是,如果您使用jQuery DOM或任何其他方法进行数据注入,也可以使用其他方法。资料来源:https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion