为什么AngularJS$compile不执行javascript代码?

为什么AngularJS$compile不执行javascript代码?,angularjs,angularjs-directive,angularjs-compile,Angularjs,Angularjs Directive,Angularjs Compile,我试图编译一个HTML,里面有样式和脚本标记。HTML被正确编译,代码被添加到DOM中,样式也可以工作,但脚本不会执行 有人知道为什么吗 请参阅下面的代码。“Hello World”以粗体显示,但不会引发窗口。警报 <html> <body> <div ng-app="myModule"> <div ng-controller="myController"> <d

我试图编译一个HTML,里面有样式和脚本标记。HTML被正确编译,代码被添加到DOM中,样式也可以工作,但脚本不会执行

有人知道为什么吗

请参阅下面的代码。“Hello World”以粗体显示,但不会引发
窗口。警报

<html>
    <body>
        <div ng-app="myModule">
            <div ng-controller="myController">
                <div compile="html"></div>
            </div>
        </div>

        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.10/angular.min.js"></script>

        <script type="text/javascript">
        <!--
            var module = angular.module("myModule", []);

            module.controller("myController", function ($scope) {
                $scope.message = "World";

                var html = "<div class='hello'>Hello {{ message }}</div>";
                var style = "<style type='text/css'>.hello { font-weight: bold; }</style>";
                var script = "<script type='text/javascript'>window.alert('Hello from JS!');</script>";

                $scope.html = html + style + script;
            });

            module.directive("compile", function ($compile) {
                return function (scope, element, attrs) {
                    scope.$watch(
                        function (scope) {
                            return scope.$eval(attrs.compile);
                        },
                        function (value) {
                            element.html(value);
                            $compile(element.contents())(scope);
                        }
                    );
                };
            });
        //-->
        </script>
    </body>
</html>


我想说的是XSS保护,但我无法为您提供这方面的来源。但是从开发人员的角度来看,无论如何你都不应该这样做。如果有人想维护您的代码,这会让人感到困惑,所以请不要这样做that@MrWook谢谢你的评论。我知道!这是一个具体的案例,我问我的客户什么时候想要发布更改,他回答“昨天!”:P因此我们尝试只在后端处理解决方案(html变量由AJAX请求填充),而不在前端进行更改。但我被困在这个“问题”上了。它可能真的是XSS,但Chrome并没有在控制台上给出任何错误。真烦人,没必要出错。它将以角的方式逃逸。即使你的客户这么说。请先找到更好的解决方案,然后再在计算机内部创建安全漏洞code@MrWook好。。我不同意这可能被称为安全漏洞。我认为,一旦它在同一个域上运行,它实际上就不是XSS。它只是一个加载javascript代码的AJAX请求。如果是XSS,Chrome真的需要至少显示一个警告,让我(至少,再次)决定是否继续使用该网站。我也不能保证是AngularJS逃脱了它,可能是Chrome。关于特定的安全案例,没有人可以利用这个漏洞,除非以相同的方式公开所有web应用程序,例如客户端脚本。如果我错了,请纠正我。做你想做的。您不需要编译它,只需使用普通的旧JavaScript即可。var script=document.createElement('script');script.type='text/javascript';script.innerHTML='window.alert(\'Hello from JS!\');';document.getElementsByTagName('head')[0].appendChild(脚本);