获取错误:无法转换JavaScript参数arg 0 [nsIDOMWindow.getComputedStyle]

时间:2013-06-14 22:27:06

标签: javascript jquery firefox

我有一些javascript代码可以找到并将文本替换为图像。然后我收集原始文本的字体大小,并使用它来设置新图像的大小。

问题是,我一直收到错误:Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle]

代码:

function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement === 'undefined') {
        // Throw error here if you want...
        return;
    }
    var regex = typeof searchText === 'string' ?
                new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || $("body").get(0)).childNodes,
        excludes = 'html,head,style,title,link,meta,script,object,iframe';
        var cnLength = childNodes.length;
    while (cnLength--) {
        var currentNode = childNodes[cnLength];
        if (currentNode.nodeType === 1 &&
            (excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
            arguments.callee(searchText, replacement, currentNode);
        }
        if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
            continue;
        }
        var parent = currentNode.parentNode;
        var frag = (function(){
                var html = currentNode.data.replace(regex, replacement);
                var wrap = document.createElement('div');
                var frag = document.createDocumentFragment();
                wrap.innerHTML = html;
                while (wrap.firstChild) {
                    frag.appendChild(wrap.firstChild);
                }
                console.log(currentNode);
                var jQNode = $(currentNode);
                console.log("yay");
                // var fontSize = jQNode.css('font-size');
                if (!currentNode || currentNode == document) currentNode = document.body
                var fontSize = getStyle(currentNode, 'font-size');
                console.log("tast");
                var heightPixels = fontSizeToPixels(fontSize);
                $(".InLogo",frag).each(function(){
                    $(this).css("height", heightPixels+"px");
                });
                return frag;
            })();
        parent.insertBefore(frag, currentNode);
        parent.removeChild(currentNode);
    }
}
function getStyle(el,styleProp) {
  var camelize = function (str) {
    return str.replace(/\-(\w)/g, function(str, letter){
      return letter.toUpperCase();
    });
  };

  if (el.currentStyle) {
    return el.currentStyle[camelize(styleProp)];
  } else if (document.defaultView && document.defaultView.getComputedStyle) {
    return document.defaultView.getComputedStyle(el,null)
                               .getPropertyValue(styleProp);
  } else {
    return el.style[camelize(styleProp)]; 
  }
}

错误发生在return document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);

getStyle()

1 个答案:

答案 0 :(得分:2)

something.childNodes包括textNodes和Elements,这是getStyle()函数的一个问题。

节点没有样式(Elements do),所以谁知道当你输入具有.data的getStyle时会发生什么?一个普通的节点。

检查样式是否存在以避免运行时错误:

FIX:

var fontSize =  currentNode.style ? getStyle(currentNode, 'font-size') : 0;