11

我在管理管理页面时遇到了一些困难,我经常在 Chrome 中看到“Aw Snap”。

我有一个“商品”管理页面,您可以在其中向网站添加新产品。
如果用户选择“T 恤”作为产品类型,则会出现一些新选项。即大小和颜色。

大小只是一个多选框,但单击“添加颜色”会初始化一个阴影框。

尺寸和颜色

影盒形式

阴影框允许用户输入颜色名称并选择十六进制颜色(通过Wheel Color Picker插件)并上传代表图像(通过Uploadify)。在提交时,Uploadify 脚本会上传文件,然后在完成后脚本通过 JQuery AJAX 将其他颜色信息发送到数据库。

提交按钮脚本:

function add_colour_submit(){
    $('#admin-add-colour-response').text('Processing...').fadeIn(1000);
    $('#admin-add-colour-image').uploadifySettings('scriptData', {
        'title': $('#admin-add-colour-title').val(),
        'hex': $('#admin-add-colour-hex').val(),
        'gender': $('#admin-add-colour-gender').val()
    });
    $('#admin-add-colour-image').uploadifyUpload();
}

上传“完成时”:

'onComplete': function (event, ID, fileObj, response, data) {
    $("#admin-add-colour-response").fadeTo(200,0.1,function(){
        $("#admin-add-colour-response").html('Complete.').fadeTo(900,1,
            function()
            {
                var responseArray = response.split(',');
                var id = responseArray[0];
                var title = responseArray[1];
                var hex = responseArray[2];
                var gender = responseArray[3];
                parent.get_colour(id, title, hex, gender);
            });
        });
    }

AJAX 操作完成后,会显示一条反馈消息“完成”。
这段时间之后,JQuery 代码以编程方式关闭 shadowbox,并在父页面上创建一个小 div 来表示提交的颜色。

具有 1 种颜色的颜色 Div

使用此方法可以添加多个。

具有 2 种颜色的颜色 Div

获取颜色函数:

function get_colour(id, title, hex, gender){
    $('#sb-nav-close').click(); //trigger shadowbox close
    //create colour object div
    var colourObject = '<div class="colourObject"><div class="colourPreview" style="background:#'+hex+'"></div><div class="colourInfo"> '+title+' / '+gender+'</div><div class="colourRemove"><a href="#" onclick="remove_colour('+id+')">x</a></div</div>'
    var currentList = $('#colour-list').html();
    $('#colour-list').html(currentList+colourObject);

    //re-initialise any shadowbox links in the page
    Shadowbox.init({
        skipSetup: false
    });
    Shadowbox.setup();
}

我的问题是,在上述功能期间,也许在关闭影子盒期间,我在 Chrome 中得到了一个 Aw Snap。上面颜色 div 的屏幕截图是使用 Safari 制作的,我从来没有遇到任何问题。

我有几个插件(shadowbox、wheel color picker、uploadify、jquery),所以这些插件的冲突会导致错误吗?

更新。
我刚刚设法在更多浏览器中对此进行了测试,这绝对是仅与 Chrome 相关的问题。

4

4 回答 4

8

我会通过那个 get_colour 函数并开始一次删除一个东西,从重新初始化你的Shadowbox. 初始化/设置两次可能会破坏它。

如果注释掉.initand.setup调用确实修复了崩溃,那么我将开始研究如何在重新初始化之前完全删除(或取消初始化)你的 Shadowbox。

如果它没有修复它,我将继续向上移动该功能,删除代码,直到你可以阻止它崩溃。

此外,关闭 shadowbox 可能会告诉它在幕后做一堆工作(删除 dom 元素,以及 Shadowbox 在其 JS 核心深处所做的任何其他事情)。也许问题是您正在关闭它,然后告诉它过早初始化,而 Chrome 仍然保留对(尚未关闭的)灯箱的引用。

要测试/修复此问题,请尝试将initandsetup调用完全移至另一个函数,并且仅在您手动单击页面上的测试链接时调用该函数。确保您的get_colour函数首先运行并成功完成。如果它有效,那么您知道这是问题所在,并且您需要等待更长的时间才能调用.initand .setup。也许您可以在 Shadowbox 的 onClose 事件期间调用这两个方法……或者稍后在您的代码中的其他地方调用。

来自提问者关于解决方案实施的更新:

以防万一其他人遇到类似的麻烦。最终的解决方案是因为我正在使用 .html() 调用来操作 DOM,而 .click() 调用似乎仍在进行中。

该解决方案要求我将 .click() 放在之前的 .html() 调用之后。

//create colour object div
var colourObject = '<div class="colourObject"><div class="colourPreview" style="background:#'+hex+'"></div><div class="colourInfo"> '+title+' / '+gender+'</div><div class="colourRemove"><a href="#" onclick="remove_colour('+id+')">x</a></div</div>'
var currentList = $('#colour-list').html();
$('#colour-list').html(currentList+colourObject);

$('#sb-nav-close').click(); //trigger shadowbox close

它现在可以在所有浏览器中完美运行。

我想这里的教训是任何时候都不要处理太多,我从外观上看重了浏览器。

于 2011-09-24T19:56:03.717 回答
1

请参阅此页面,其中描述了“Aw Snap!” 页面:http ://www.google.com/support/chrome/bin/answer.py?answer=95669

这通常是由于计算机内存不足造成的。可能是您的应用程序使用了太多资源。尝试拨出图像和 javascript,只使用你需要的量。

于 2011-09-24T17:07:41.777 回答
0

以下将始终在 Chrome 上生成“Aw Snap”消息,但在 Firefox 和 Safari 上运行良好:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="haemosphere">
  <head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>    
    <script type="text/javascript">

    $(function() {

    $("#user-action-div").on("click", function(ev, ui) {
            $(this).empty().append("<select id='user-action-sel'>");
        $('select', this).append("<option value='nop' selected='selected'>Rugby</option>");
        $('select', this).append("<option value='profile'>My Profile</option>");
        $('select', this).append("<option value='logout'>Log Out</option>");
        $("select", this).trigger("create");
    });

    });

    </script>
  </head>
  <body>
    <span id="user-action-div">Click Here</span>
  </body>
</html>
于 2014-04-30T04:01:34.227 回答
-1

如果是与 Chrome 相关的问题,您应该尝试将其提交给 Chromium Bug Tracker(请参阅在哪里可以找到并提交关于 Google 的 Chrome 浏览器的错误报告?),或者至少看看是否存在类似问题。

也许为他们提供出现此问题的最小页面(例如使用jsfiddler创建一个虚拟页面)

于 2011-09-19T08:48:49.527 回答