本文介绍了Chrome扩展程序:未捕获错误:不允许此字段的字符串生成代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正尝试在Chrome扩展程序中使用并获得以下内容错误:未捕获错误:在解析模板时不允许此上下文的字符串代码生成
。你能帮我解决这个问题吗?
I am trying to use micro template engine in chrome extension and getting the following error : Uncaught Error: Code generation from strings disallowed for this context
while parsing the template. Can you help me fixing this?
Manifest.json
Manifest.json
manifest.json:
{
"name": "YYYY",
"version": "1.0",
"manifest_version": 2,
"description": "The first extension that I made.",
"browser_action": {
"default_icon": "icon.ico",
"default_popup": "popup.html"
}
}
popup.html:
popup.html:
<!doctype html>
<html ng-csp ng-app>
<head>
<title>Getting Started Extension's Popup</title>
<style>
body {
min-width:357px;
overflow-x:hidden;
}
</style>
<!-- JavaScript and HTML must be in separate files for security. -->
<script src="jquery.min.js"></script>
<script src="popup.js"></script>
</head>
<body>
<ul>
<li></li>
</ul>
<script id="userlisttemplate" type="text/html">
<% for(var i=0; i < items.length; i++) { var item = items[i]; %>
<li>
<%= item.UserName%>
</li>
<% } %>
</script>
</body>
</html>
popup.js:
// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function () {
var cache = {};
this.tmpl = function tmpl(str, data) {
// Figure out if we're getting a template, or if we need to
// load the template - and be sure to cache the result.
var fn = !/\W/.test(str) ?
cache[str] = cache[str] ||
tmpl(document.getElementById(str).innerHTML) :
// Generate a reusable function that will serve as a template
// generator (and which will be cached).
new Function("obj",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
// Introduce the data as local variables using with(){}
"with(obj){p.push('" +
// Convert the template into pure JavaScript
str
.replace(/[\r\t\n]/g, " ")
.split("<%").join("\t")
.replace(/((^|%>)[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%>/g, "',$1,'")
.split("\t").join("');")
.split("%>").join("p.push('")
.split("\r").join("\\'")
+ "');}return p.join('');");
// Provide some basic currying to the user
return data ? fn(data) : fn;
};
})();
$.ajax({
url: myurl,
type: "GET",
contentType: "application/json",
success: function (response) {
debugger;
console.log(response);
var data = response.data;
var s = tmpl($('#userlisttemplate').html(), { items: data });
$('body').append($(s));
},
error: function (jqXHR, textStatus, errorThrown) {
$("#result").text(textStatus);
}
});
推荐答案
这个模板库不能用于常规因为它使用带有字符串的 new Function()
,现在在Chrome的新内容安全策略下不允许使用带清单版本2创建的扩展。
This templating library can't be used in a regular extension page because it uses new Function()
with a string, which is now disallowed under Chrome's new Content Security Policy for extensions created with manifest version 2. see here
这篇关于Chrome扩展程序:未捕获错误:不允许此字段的字符串生成代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!