为什么Javascript代码在ko.observableArray()中执行;

时间:2018-03-06 05:28:47

标签: javascript knockout.js

我有一个问题,我正在使用knockout.js从谷歌驱动器和页面列表中读取文件。 我正在使用observable数组来存储文件数据 文件数据包括文件的各种参数,如名称,大小和链接等。

我正在创建JSON对象并推送到数组。 但这是主要问题。如果文件名包含

等javascript代码
<script>alert('i am executing');</script>

然后执行并显示警告消息

这里有一些细节

var file = {
  Name: <script>alert('message')</script>,
  URL: item.alternateLink,
  ServerRelativeUrl: item.alternateLink,
  modified: item.modifiedDate,
  icon: item.iconLink
};

docs.push(file);

是否有人面临同样的问题或者有防止不需要的脚本执行的解决方案

1 个答案:

答案 0 :(得分:1)

由于您使用html绑定属性Name,因此该属性中的任何javascript代码都将由浏览器执行。为防止出现这种情况,您应使用text代替html来绑定数据。这将编码任何HTML防止脚本注入。

e.g。

<p class="summary">
   <a target="_blank" data-bind="text:Name, attr:{href:URL}"></a>
</p>