Colorbox在IE中无法正确加载

我找到了一个解决方案,但它不是最好的,所以我仍在寻找解决方案。 看看我做了什么的回答。


更新 – 我的错误仍然存​​在,如下所述,但如果我打开IE的开发者工具,错误就会消失! 如果我关闭浏览器并重新打开错误重新出现!

更新2 – 我试图将以下代码插入到我的JS中,看看是否可以解决问题,但它没有:

if (!("console" in window) || !("firebug" in console)) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; window.console = {}; for (var i = 0, len = names.length; i < len; ++i) { window.console[names[i]] = function(){}; } } 

然后这个:

 var console = {}; console.log = function(){}; 

我还浏览了我的JS文件,并且从未遇到会导致错误的console.log函数。


这是一个令人费解的问题,我会尽力解释。 我在一个页面中设置cookie,在第一次访问时会显示一个灯箱。 它在FF,Chrome等中运行良好,但在IE中却不行。

在IE中发生的是用于调用我的灯箱(彩盒)的脚本,但我看到的是AJAX Loader正在旋转并且内容从未加载。 我发现剧本太快了。 我正在使用$j(document).ready(function()我切换到: $j(window).load(function() ,所有似乎都很好,它工作正常,直到我从另一个页面开始并进入页面上文提到的。

如果我从任何其他页面开始并单击链接我有同样的问题! cookie正常工作,不会再次激活盒子。

换句话说,如果我清除cookie并从问题页面开始,则没有问题。 但是如果我从任何其他页面开始(清除了cookie)并转到上面的页面,则颜色框无法正确加载。

从我可以告诉$j(window).load(function()无法正常工作。

我从IE收到没有错误。 我正在使用IE 8进行测试,因为我使用的是Windows XP,所以无法测试9。 (我被告知它在IE 9中工作正常但尚未确认)脚本位于我的文档的中。 (如果我将脚本移动到它会完全打破页面。)

我已经阅读了IE中不正确或短缺的DOCTYPE问题和彩盒问题。 我的DOCTYPE如下,应该是正确的:

   

任何想法或想法都非常感谢!

这是我正在使用的代码:

使用Javascript

 var $j = jQuery.noConflict(); $j(window).load(function() { //window.onload = function() does not function properly either... if(!$j.cookie('gallerycookie')){ $j.colorbox({ inline:true, href:"#gallery-nav-instruct" }); $j.cookie("gallerycookie", 1, { expires: 30, path: '/' }); } }); 

HTML

 

另一个注意:我在页面上使用jAlbum,我没有看到任何冲突,但是可能有问题吗? 我不能在这里发布该代码,因为它会超过SO的发布限制。

要从此页面开始触发此错误,将出现一个灯箱。 单击Message Examples (灯箱的左下角或菜单中没有灯箱的第一项)。

如果需要,这是指向该页面的直接链接。 (直接转到页面不会触发错误。)

我试图使用window.onload = function()并发生同样的问题。

我尝试使用事件处理程序在加载div后触发脚本,甚至根本不触发脚本。 这是代码:

 var $j = jQuery.noConflict(); $j('#gallery-nav-instruct').load(function() { if(!$j.cookie('gallerycookie')){ $j.colorbox({ inline:true, href:"#gallery-nav-instruct" }); $j.cookie("gallerycookie", 1, { expires: 30, path: '/' }); } }); 

打开开发人员工具时它消失的原因是IE在任何console.log语句中都不能很好用,直到你打开开发人员工具。 某处必须有console.log。 它可以在您正在使用的任何插件文件或javascript文件中。 由于某种原因,它会杀死运行它的javascript。 打开开发人员工具将console.log识别为javascript函数(我的最佳猜测),因此它突然起作用。

我刚刚遇到这个问题,虽然这个问题已经很久了,但我仍然希望将她的答案用于未来的访问者……

我的colorbox版本ColorBox v1.3.19.2似乎返回了某种控制台对象。 这可能是您打开开发人员工具栏后问题消失的原因。

我的解决方案是改变colorbox脚本中的最后一个语句(可以用作缩小版本的开发)。 脚本以。结尾

}(jQuery, document, this, console));

我用它替换了

}(jQuery, document, this, null));

现在一切都适合我。

我似乎已经解决了这个问题,尽管我仍然对错误发生的原因感到困惑。 我会解释我做了什么:

首先,我使用Dreamweaver Teamplates来创建我的网页。 所以我的代码最终看起来像这样

  Template Content for head section then  Content outside of template that goes in head section.    Template Content for Body  Page or body content not inside template.  More Template Content for Body  

最初我的脚本在head部分内部,如果我把它们放在关闭的body标签之前它打破了页面。 我所做的是改变了代码的位置。 我将Lightbox HTML放在部分的顶部,然后脚本调用灯箱正下方,但在body部分的页面内容上方,它工作正常! 如果有人能够解释为什么那样有用,并且可以帮助我理解为什么它不起作用请告诉我。

我开始写这个作为对这个问题的评论,但它很长,所以我决定把它写成答案。 我不知道这是否能解决问题,但我认为值得尝试。

  • 创建一个新函数setCookieAfterFirstView并在该函数内调用$j.cookie调用
  • setCookieAfterFirstView onComplete回调上调用setCookieAfterFirstView函数。

这样,您可以确保没有其他调用与colorbox打开冲突。 也许有一个关于不同插件相互冲突的jQuery问题,我现在只是猜测..

 var $j = jQuery.noConflict(); var setCookieAfterFirstView: function() { $j.cookie("gallerycookie", 1, { expires: 30, path: '/' }); }; $j(window).load(function() { //window.onload = function() does not function properly either... if (!$j.cookie('gallerycookie')) { $j.colorbox({ inline: true, href: "#gallery-nav-instruct", onComplete:function() { setCookieAfterFirstView(); } }); } }); 

您是否可以尝试这个并对此答案发表评论,无论是否解决了问题?