0

我有这个错误,它没有给出任何关于问题所在的指示:

我正在尝试将此字符串存储在课程位置字段中:

B^$eNrT0srLywNiLRANpiAsMAknoMKognlwdUi6ERrQuDARmCwmE2EMslOQ9aFaguw6dKyllQxhJcNp TFBTk1iSWhBvYBhvYGAKABXXVRI&#3d;

但它抛出 SyntaxError: unterminated string literal

当我修改了 reload 在 ReloadAPIAdaptor.js 中存储数据的方式时

从使用eval整个字符串:

eval("this.cmi.core.lesson_location.cmivalue =\"B^$eNrT0srLywNiLRANpiAsMAknoMKognlwdUi6ERrQuDARmCwmE2EMslOQ9aFaguw6dAzXnJwMozFB TU1ual4pAMimU3Q&#3d;\";");

首先评估对象:

var o = eval("this." + element);
console.log("o",o);
if(o) o.cmivalue = value;

然后它无误地存储数据,

现在我无法修改任何 lms 中的代码,所以这只是为了确定字符串是否无法存储但可以。只是邪恶不起作用,所以问题是给定字符串中 eval 不喜欢的内容以及如何修复它。

4

1 回答 1

0

如果您执行以下操作,则您的字符串没有任何问题:

API.SetValue("cmi.core.lesson_location", "B^$eNrT0srLywNiLRANpiAsMAknoMKognlwdUi6ERrQuDARmCwmE2EMslOQ9aFaguw6dKyllQxhJcNp TFBTk1iSWhBvYBhvYGAKABXXVRI&#3d;");

(哪里API是对窗口API对象的引用)

就 SCORM 而言,该字符串是有效的,并且长度在可接受的字符限制内。

如果您遇到问题,则可能是 Reload 包装器中的错误。坦率地说,Reload 包装器中的代码(可在 SourceForge 上找到)已有 10 年历史。它使用eval()和其他已被确定为有问题的 JavaScript 技术,并且受到领先的 JavaScript 开发人员的强烈反对。您的错误很可能与包装器对eval().

我会尝试使用不同的包装器,看看它是否有所作为。

于 2013-11-07T16:47:54.110 回答