【发布时间】:2015-08-12 15:40:49
【问题描述】:
我尝试将书签按钮添加到我的网站,并在控制器中生成链接。
模板部分:
<a id="bookmarklet"
class="bookmarklet"
onclick="alert('Drag and drop me to the bookmarks bar');return false;"
href="{{getCode()}}">
+ Add
</a>
控制器部分:
$scope.getCode = function () {
var code = 'javascript:(function(){s=document.createElement(\'SCRIPT\');s.type=\'text/javascript\';' +
's.src=\'http://localhost:9000/scripts/bookmarklet/bookmarklet.js?x=' + ($scope.user.id) + '\';' +
'document.getElementsByTagName(\'head\')[0].appendChild(s);document.sc_srvurl=\'http://localhost:8080\'})();' ;
return code;
};
但编译后我得到以下信息:
<a class="bookmarklet" href="unsafe:javascript:(function(){s=document.createElement('SCRIPT');s.type='text/javascript';s.src='http://localhost:9000/scripts/bookmarklet/bookmarklet.js?x=5517325d40c37bc2bfe20db6';document.getElementsByTagName('head')[0].appendChild(s);document.sc_srvurl='http://localhost:8080'})();">
+ Add
</a>
链接以“unsafe”开头,我不知道如何告诉 Angular 信任此链接。
这个答案 - Angular changes urls to "unsafe:" in extension page 建议将协议添加到白名单。 我不想禁用 $sce 或将“javascript”添加到白名单协议,因为我认为它不安全。
我可以告诉 angularjs 避免使用 $sce 添加前缀“不安全”吗?不幸的是,我的文档不清楚,$sce.trustAsJs(code) 没有帮助我。
!EDIT Angular 版本是 1.4.1。
【问题讨论】:
-
stackoverflow.com/questions/15606751/… 中的解决方案是将协议添加到白名单,在我的情况下我关心的是安全性。
-
我认为您没有其他选择。而且您不会添加“javascript”,而是将“chrome-extension”添加到白名单中。
-
这确实是一个值得关注的问题。我能想到的另一种方法是创建一个指令并在那里设置
href属性的值(通过直接在指令的 DOM 元素上操作它)。这对您的用例可行吗? -
@plamut 我不清楚指令的解决方法如何提供帮助。我想知道有没有直接的方法告诉 Angular 信任这个 url?
标签: angularjs