2014-02-10 95 views
8

我有一个非常基本的html元素,我想fadeIn()。然而,我使用require.js,所以我认为这可能是问题的一部分。我使用jQuery 2.0.3当使用fadeIn我得到这个错误:jQuery 2.0.3 bug - fadeIn(),show()在firefox中破解 - SecurityError:操作不安全

SecurityError: The operation is insecure. 
chrome://firebug/content/console/commandLineExposed.js 
Line 5 

我以前从未见过这一点,我已经重置Firefox和我的电脑。

的Html

<message-box> 
     <message-info></message-info> 
     <close-box>x</close-box> 
</message-box> 

JS

$('message-Box').fadeIn(); 

我只得到这个错误与firefox v27。没有其他的浏览器有这个问题,但我没有任何旧版本的FF

我不求比误差之外的任何帮助测试它...

See the error in action?并运行此命令:SD.message.showMessage('Somehow this breaks everything', 'bad');

----- 编辑 -------

那么伤心,你需要测试这个Here我向你保证,这是SFW,它只是登录页。

我相信我的其他JS文件中肯定有东西存在冲突,但我还没有发现问题。

我删除了一个在这里的小提琴,因为它没有任何帮助的问题,因为添加我希望它的赏金尽可能有帮助。

第二个编辑

奇怪的是,在运行任何show(), hide(), fadeIn()等一个iframe时在页面的基础上,就在身体之前创建。我需要在代码中思考为什么会发生这种情况。

第三编辑

我对这个没有任何理由或解释,但更新到2.1.0 jQuery的有固定我的问题。如果任何人都可以解释的问题,那么我很乐意给他们点:)

+2

这不是有效的HTML。 – enapupe

+2

当然是它的html5我的朋友。你上次什么时候阅读了规范:http://w3c.github.io/webcomponents/spec/custom/,并且赞扬那些赞成它的人。 –

+0

添加高度:100%到messageBox似乎工作。 http://jsfiddle.net/9Frn8/5/ – enapupe

回答

8

单步执行jQuery代码,您最终会在下面找到这个内部函数。 jQuery尝试写入iframe文档时会引发安全错误。 jQuery 2.1.0有一个确定默认节点显示值的不同方式,所以你可以把它当作jQuery/browser组合错误。您可以通过粘贴以下到控制台微创重建安全错误:

var iframe = jQuery("<iframe frameborder='0' width='0' height='0'/>").css("cssText", "display:block !important").appendTo(document.documentElement); 
iframe[0].contentWindow.document.write("<!doctype html><html><body>"); 

内部jQuery函数:

function css_defaultDisplay(nodeName) { 
    var doc = document, 
     display = elemdisplay[ nodeName ]; 

    if (!display) { 
     display = actualDisplay(nodeName, doc); 

     // If the simple way fails, read from inside an iframe 
     if (display === "none" || !display) { 
      // Use the already-created iframe if possible 
      iframe = (iframe || 
       jQuery("<iframe frameborder='0' width='0' height='0'/>") 
       .css("cssText", "display:block !important") 
      ).appendTo(doc.documentElement); 

      // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse 
      doc = (iframe[0].contentWindow || iframe[0].contentDocument).document; 
      doc.write("<!doctype html><html><body>"); 
      doc.close(); 

      display = actualDisplay(nodeName, doc); 
      iframe.detach(); 
     } 

     // Store the correct default display 
     elemdisplay[ nodeName ] = display; 
    } 

    return display; 
} 
2

specification自定义元素应具有“ - ”在他们的标签,让您的标记应该是这样的:

<message-box> 
    <x-message><div></div></x-message> 
    <x-close>x</x-close> 
</message-box> 

更改和相应的样式更新后,它的工作原理据我所知:http://jsfiddle.net/9Frn8/11/

+0

我会试试这个在工作版本上,而不是小提琴版本。错误只发生在我给的链接上。 –

2

看起来像这可能是由于您的CSS文件中的绝对路径。我也看到(在控制台中)你正在尝试调用localhost(当然,这失败了)。您的代码中似乎存在一些导致Firefox停止特定进程的问题。具体来说,firefox考虑跨域。

这很可能是一个Same-Origin-Policy问题。

+0

humm有趣,我会看看这个。虽然调用这个不应该做任何Ajax调用。 $('messageBox')。show()你不会期望一个ajax调用:) –

+0

不是。但是你的CSS文件也有字体系列名称,如:C:\ folder1 \ folder2 \ ..... – Kovo

+0

关于本地主机的非常好的一点,这是来自'livereload.js'。我会删除它,并看看那会导致:) –