如何在注射到体内之前对脚本进行消毒
How to sanitize script before injecting into body
本文关键字:脚本 更新时间:2024-01-28
我正在创建一个Firefox jetpack插件,它从API获取选项卡中打开的URL的数据。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样式。
有什么解决方案可以在不破坏功能的情况下对其进行消毒?感谢
我使用了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 = { "&": "&", '"': """, "<": "<", ">": ">" };
我的延期是用这种方法批准的。但是,如果使用jQueryDOM或任何其他方法进行数据注入,也可以使用其他方法。来源:https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 显示时间的脚本
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- Google Adsense多次加载脚本
- FF视图源|脚本高亮显示为红色