angularjs-如何注入生成的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> 我的控制器

我有一个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>

我的控制器

    $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
时打印出来。请提供一个示例。我无法想象你的解决方案。