NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数arg 0[nsIDOMWind

NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle] (Followup)

本文关键字:参数 JavaScript 转换 arg nsIDOMWind XPC ERROR BAD CONVERT JS NS      更新时间:2023-09-26

好的,所以我终于弄清楚了代码的哪一部分导致了异常。你可以在这里阅读最初的帖子。最初帖子中的代码缺少实际导致异常的部分(手动订阅viewPortData observable)。显然,我做错了。。。这是代码:

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);
        }
    }
};

那么我哪里错了?

我也出现了同样的错误。问题是因为HTML有注释。类似于:

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

要解决这个问题,在不更改HTML的情况下,您需要用其他东西包装HTML,因此只向jQuery传递一个元素:

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

我使用您在这篇文章和上一篇文章中的代码创建了一个fiddle,它可以正常工作。

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

我的最佳猜测是,您返回的HTML就是问题所在。

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

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

jQuery为…做数学运算更简单。。。。我认为它无法获得元素的计算样式,因为它内部有一些浮动或其他原因。

我也有同样的问题。。。。。但经过一番研究后,我来到了这里(天哪,我失去了选项卡——无论如何,这是一份jQuery错误报告),并意识到需要摆弄什么才能修复它。

在我的代码中,我把fadeIn()换成了show(),所以这与动画无关

你可能会认为,如果没有动画,这个问题也不会普遍存在——但事实确实如此。

尝试slideDown(0如果你的静止图像在动画之后,它可能不起作用,但它值得一试。

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

根据这个jQuery错误,问题可能与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();

希望这能帮助到别人!