NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle](Followup)

NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle](Followup)

问题描述:

好吧,我终于弄清楚我的代码的哪个部分导致异常。您可以阅读初始文章here.初始文章中的代码缺少实际引起异常的部分(手动订阅viewPortData可观测)。显然,我做错了某种方式...这里是代码:NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle](Followup)

self.viewPortData = ko.observable(); 
self.viewPortData.subscribe(function (newValue) { 
    var viewPort = $('#metro-view-port'); 
    if (viewPort && newValue) { 
     self.fadeInOut(viewPort, newValue); 
    } 
}); 

self.fadeInOut = function (domObject, newContent) { 
    if (newContent) { 
     var currentContent = domObject.html(); 
     if (currentContent) { 
      var wrappedContent = $(currentContent); 
      wrappedContent.fadeOut(400, function() { 
       wrappedContent.empty(); 
       domObject.html(newContent).hide().fadeIn(400); 
      }); 
     } else { 
      domObject.html(newContent).hide().fadeIn(400); 
     } 
    } 
}; 

那么我哪里出错了?

我创建了一个fiddle使用您的代码从这篇文章和以前的帖子,它的工作原理应该如此。

但是,我只返回一个简单的<div>标记来填充metro-view-port<div>的HTML。

我最好的猜测是你回来的HTML是问题。

我给你的建议是首先通过减少HTML返回到一个非常简单的东西来确认,然后逐渐重新引入预期的代码,直到你发现问题。

这个错误是在旧版本的jQuery。尝试将.hide()更改为.css('display','none')

将您的fadeIn(400)翻转到show()。

jQuery更简单的做数学....我认为它不能得到元素的计算风格,因为它里面的浮点数或某些东西。

我有同样的问题.....但经过一些研究后,我到了这里(DAMMET我失去了选项卡 - 这是一个jQuery的错误报告),并意识到需要修复它。

在我的代码我换出淡入()来显示(),所以它不与动画做

你会想到,如果没有动画的问题不会是普遍的两种 - 但它是。

尝试了slideDown(0,如果你仍然是一个动画后,可能无法正常工作,但它的价值弹出。

发生在我身上的同样的错误。因为HTML对其有意见的问题引起的。喜欢的东西:

<!-- Some Comment goes here --> 
<div> 
    ... 
</div> 

为了解决这个问题,在不改变HTML,你需要用别的东西的HTML,所以你只有一个元素传递给jQuery的:

var div = document.createElement('div'); 
div.innerHTML = nativeHtml; 

var $html = $(div); 
+0

证实 - 当我从要附加的代码中移除html注释时,错误消失了。 – zergussino

雅直到this jQuery bug,问题可能与HTML中的换行符和空白文本节点有关。就我而言,我正在一个模板,像这样的:

<script id="myTemplate" type="text/template"> 
    <div> 
    <h2>Important stuff</h2> 
    </div> 
</script> 

而像这样分析它:

var currentContent = $.parseHTML($('#myTemplate').html()); 

所以我结束了与代表换行和空白字符在一堆文本节点原始的HTML模板。可能有类似的事情发生在你身上。

为了解决这个问题,我剥离出来的新行和空格,像这样:

$('#myTemplate').html().replace(/\n/g, '').replace(/>\s+</g, '><').trim(); 

希望帮助别人!