【问题标题】:breeze.debug.js javascript error微风.debug.js javascript错误
【发布时间】:2012-12-20 02:39:17
【问题描述】:

几个月来,我一直在使用微风和 WebAPI(从 John Papa 的示例开始)构建一个 SPA。几天前,在我的 Windows 8 VS2012 内部 IE 浏览器上,微风.debug.js 中开始出现 javascript 错误。

JavaScript critical error at line 4663, column 13 in //http://localhost:50033/Script/breeze.debug.js

SCRIPT1028: Expected identifier, string or number

我回到我的另一台开发机器,带有 VS2012 的 Windows 7,它没有给出错误。两台机器之间的代码是相同的。我使用 Azure TFS 来同步代码。

错误发生在关闭});

        function convertFromODataEntityType(odataEntityType, schema, metadataStore, serviceName) {
        var shortName = odataEntityType.name;
        var namespace = translateNamespace(schema, schema.namespace);
        var entityType = new EntityType({
            shortName: shortName,
            namespace: namespace, 
        });                          <==== line 4663

当我删除命名空间后的逗号时,错误消失但在第 6911 行的另一个位置再次出现错误。

        day:         { fn: function(source) { return source.day;}, dataType: "Number" },
        month:       { fn: function(source) { return source.month; }, dataType: "Number" },
        year:        { fn: function(source) { return source.year; }, dataType: "Number"},
    };             <========= line 6911

删除上面一行的逗号,它会在第 1271 行出错

Unhandled exception at line 1271, column 17 in http://localhost:50033/Scripts/breeze.debug.js

0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'some'

在此代码处:

function compile(self) {
    if (!self._compiledFn) {
        // clear off last one if null 
        if (self._fns[self._fns.length - 1] == null) {
            self._fns.pop();
        }
        if (self._fns.length === 0) {
            return undefined;
        }
        self._compiledFn = function (that, v) {
            return that._fns.some(function (fn) {
                return fn(that, v);
            });
        };
    };
    return self._compiledFn;
}

还有其他人看到过这种行为吗?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    只是一个猜测,但请检查您没有在“兼容性”模式下运行 IE。 'some' 方法是 ES5 标准的一部分,在 'compatability' 模式下不可用。

    为避免 IE 浏览器出现兼容模式问题,我们强烈建议您在 HTML 标头中添加以下内容:

    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"/>
    

    【讨论】:

    • 谢谢!这行得通。这是我的做法。我添加了一个新项目 HtmlPage1.html。我添加了元标记并将页面设置为项目的起始页。我开始了这个项目。我单击 Alt 键调出菜单栏。我单击工具,然后单击兼容性视图设置。我取消选中在兼容性视图中显示所有网站和在兼容性视图中显示 Intranet 站点。最重要的是,我从您添加到兼容性视图列表框中的网站中删除了本地主机。然后我点击关闭停止调试。我将起始页重置回 index.chtml,单击 F5。中提琴!
    • 这个问题的答案显示图片。 stackoverflow.com/questions/13284083/…
    • 这些是很好的提示,bizcad。我一直很难理解为什么我会无缘无故地进入兼容模式。元标记救了我,但你已经为根本原因提供了一些线索。
    【解决方案2】:

    我也遇到过。事实上,我经常对自己这样做,尤其是在开发过程中删除或重新排序最后一个 k/v 对时。

    虽然 IE10 和其他浏览器更宽容,但我们应该消除哈希映射对象键/值列表中的尾随逗号......并且会这样做。

    FWIW,下面的正则表达式全部找到

    ,(\s*)\}\)

    以下正则表达式替换模式修复它们(保留空格):

    $1\}\)

    【讨论】:

    • 谢谢沃德。我在我的代码中找到了其中一些并更改了它们。不幸的是,breeze.debug.js 中有一堆。缩小可能已经解决了它。杰的回答得到了复选标记,因为我只能检查一个,但你也应该得到一个。谢谢您的帮助。我可能无法 +1,你可以试试。
    猜你喜欢
    • 2013-05-26
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多