angularjs-如何注入生成的javascript
我有一个angular js页面,在该页面中,我从后端动态生成一个javascript。内容如下:angularjs-如何注入生成的javascript,angularjs,Angularjs,我有一个angular js页面,在该页面中,我从后端动态生成一个javascript。内容如下: <script type='text/javascript' language='JavaScript' src='https://secure.echosign.com/public/widget?f=XXX'></script> 我的HTML <div ng-bind-html="htmlString"></div> 我的控制器
<script type='text/javascript' language='JavaScript' src='https://secure.echosign.com/public/widget?f=XXX'></script>
我的HTML
<div ng-bind-html="htmlString"></div>
我的控制器
$scope.init = function () {
$scope.initForm({
action: $attrs.action
}, function (data) {
$scope.htmlString = "<html><h3>so Here it is</h3>" + $scope.model.htmlScript + "</html>";
});
};
$scope.init=函数(){
$scope.initForm({
动作:$attrs.action
},函数(数据){
$scope.htmlString=“所以这里是“+$scope.model.htmlScript+”;
});
};
但是,在呈现页面时,会过滤掉javascript标记,并显示其余标记。请建议我如何继续?Angular.js有一个名为
$sce
()的服务,它会自动在ng bind html
等指令上使用$sanitize
。如果希望覆盖转义,则需要挂接到$sce
服务并明确信任字符串
注意
这通常不是处理来自不受信任来源的任意HTML的推荐方法,因为它可能会打开您的站点进行攻击
$scope.htmlString = $sce.trustAsHtml(
"<html><h3>so Here it is</h3>" + $scope.model.htmlScript + "</html>");
$scope.htmlString=$sce.trustAsHtml(
所以这里是“+$scope.model.htmlScript+”;
是否可以在启动时向JS注入脚本标记?我做了一些类似的事情,创建了一个调用django视图的URL,并将视图作为javascript返回。在html中,它如下所示:
<script src="app/generated.js"></script>
如果服务器请求该URL,此行将导致函数generate_javascript运行。在该函数中,我对用户进行身份验证,并从数据库中查找一些内容。然后,我通过一个模板为这个客户呈现javascript
视图.py
url(r'^generated.js$', generate_javascript, name="generate-custom-js")
@login_required
def generate_javascript(request):
previous_scores = Scores.objects.get(user=request.user).order_by('-date_recorded')[0:10]
return render(request, 'generate.tpl.js', locals(), content_type='application/javascript')
然后按如下方式完成模板:
<script src="app/generated.js"></script>
generate.tpl.js
var scores = [
{% for score in scores %}
{{ score.number }}{% if not forloop.last %},{%endif %}
{% endfor %}
];
渲染时,此模板将生成一个类似以下内容的“文件”:
var scores = [
1,
2,
3,
4,
5
];
这不是你编写过的最漂亮的javascript,但它会解析,浏览器也不在乎它是什么样子
然后在index.html中有一行
<script src="generated.js"></script>
谢谢你的指点。但我还是无法让它工作。下面是我查看的plunker URL,我可以看到脚本是由document.write发出的,服务器正在检索它。。。在不知道脚本是什么的情况下,我无法判断还应该发生什么?您是希望在屏幕上打印HTML还是希望将脚本注入页面?该脚本由Adobe EchoSign通过REST API生成和提供。他们提供的只是以下内容,所以我仍然无法理解在这一点上出现了什么问题。根据您的plunker,您使用的是ngbindhtml
,它将字符串作为内部html插入。如果不使用$sce
,则不会发出任何内容,因为脚本不受信任。如果确实使用了$sce
,则会发出字符串并解析脚本。如果您真的想打印出来,那么它会在使用ng bind
时打印出来。请提供一个示例。我无法想象你的解决方案。