0

我在24.0.1312.52 m使用 jQuery 1.8.2、jQuery UI 1.8.23 和 Knockout 2.2.0 的页面上的 Google Chrome 版本中出现错误。当我加载页面时,对一个简单的 URL 的 HTTP 请求失败GET data: HTTP/1.1,它是从初始化 jQuery UI 对话框的语句生成的(代码见帖子底部)。该页面工作正常,但这会导致状态栏和 JS 控制台中出现错误,我想避免吓到我的用户。该错误不会出现在 IE 9 或 FireFox 15.0.1 中,但会出现在 Safari 5.1.7 (Windows) 中。在 Chrome Inspector 中,错误的调用堆栈如下所示:

GET data:  jquery.min.js:2
    a.getComputedStyle.bH                      jquery.min.js:2
    p.extend.css                               jquery.min.js:2
    bZ                                         jquery.min.js:2
    b$                                         jquery.min.js:2
    p.fn.extend.show                           jquery.min.js:2
    p.each.p.fn.(anonymous function)           jquery.min.js:2
    a.fn.extend.show                           jquery-ui.min.js:5
    a.widget._create._renderAxis               jquery-ui.min.js:5
    a.widget._create                           jquery-ui.min.js:5
    a.Widget._createWidget                     jquery-ui.min.js:5
    a.widget.a.(anon function).(anon function) jquery-ui.min.js:5
    a.widget.bridge.a.fn.(anonymous function)  jquery-ui.min.js:5
    p.extend.each                              jquery.min.js:2
    p.fn.p.each                                jquery.min.js:2
    a.widget.bridge.a.fn.(anonymous function)  jquery-ui.min.js:5
    a.widget._makeResizable                    jquery-ui.min.js:5
    a.widget._create                           jquery-ui.min.js:5
    a.Widget._createWidget                     jquery-ui.min.js:5
    a.widget.a.(anon function).(anon function) jquery-ui.min.js:5
    a.widget.bridge.a.fn.(anonymous function)  jquery-ui.min.js:5
    p.extend.each                              jquery.min.js:2
    p.fn.p.each                                jquery.min.js:2
    a.widget.bridge.a.fn.(anonymous  function) jquery-ui.min.js:5
    ko.bindingHandlers.jqDialog.init           QualityWalkViewModel.js:78
    b.j.W                                      knockout-2.2.0.js:11
    g                                          knockout-2.2.0.js:43
    b.j                                        knockout-2.2.0.js:45
    W                                          knockout-2.2.0.js:10
    X                                          knockout-2.2.0.js:12
    Y                                          knockout-2.2.0.js:12
    X                                          knockout-2.2.0.js:12
    Y                                          knockout-2.2.0.js:12
    X                                          knockout-2.2.0.js:12
    b.Ca                                       knockout-2.2.0.js:58
    registerVM                                 3896:378
    (anonymous function)                       3896:362
    p.Callbacks.k                              jquery.min.js:2
    p.Callbacks.l.fireWith                     jquery.min.js:2
    p.extend.ready                             jquery.min.js:2
    D                                          jquery.min.js:2

它在三个地方引用了我的脚本:

ko.bindingHandlers.jqDialog.init     QualityWalkViewModel.js:78
registerVM                           3896:378
(anonymous function)                 3896:362

3896 是页面的名称(它是 URL 的 ID 段,例如 /WalkThrough/Edit/3896)。引用行的代码是:

(anonymous function)                 3896:362
360    <script type="text/javascript">
361    $( function() {
362        registerVM();                          <--- here

registerVM                           3896:378
374    <script type="text/javascript">
375        var vm; // debug
376        function registerVM() {
377            vm = new QualityWalkViewModel( initialQualityWalkData );
378            ko.applyBindings( vm );            <--- here
379        }

QualityWalkViewModel.js:78
68    ko.bindingHandlers.jqDialog = {
69        init: function( element, valueAccessor ) {
70            var options = ko.utils.unwrapObservable( valueAccessor() ) || {};
71            
72            // handle disposal
73            ko.utils.domNodeDisposal.addDisposeCallback( element, function() {
74                $( element ).dialog('destroy');
75            });
76    
77            // init the dialog
78            $( element ).dialog( options );     <--- here
79        }
80    };

最后一个脚本是一个自定义绑定处理程序,用于初始化 jQuery UI 对话框,改编自http://jsfiddle.net/rniemeyer/WpnTU/,以响应JQuery 对话框中的 MVC Knockout JS

如果我注释掉这一行$( element ).dialog( options );,错误就会消失。知道为什么 jQuery UI 会生成一个空data:url 并尝试请求它吗?

4

1 回答 1

0

固定的。罪魁祸首是第 260 行左右的data:url,在http://bugs.jqueryui.com/ticket/7233jquery-ui.css有一些讨论:

.ui-resizable-handle { background-image:url(data:); }

我不知道为什么他们认为这是一个更好的主意

.ui-resizable-handle { background-image: none; }

这就是我覆盖规则的原因,现在 Chrome 中没有页面错误。在某些时候,我需要在 jQUI 错误跟踪器中注册并发布更新。

于 2013-02-09T01:26:25.007 回答