getCSSProperties给出了一个Javascript错误

getCSSProperties gives out a Javascript bug

本文关键字:一个 Javascript 错误 getCSSProperties      更新时间:2023-09-26
function getStyle(el, cssprop) {
  if (el.currentStyle) { // IE
    return el.currentStyle[cssprop];
  } else if (document.defaultView && document.defaultView.getComputedStyle) { // Firefox
    return document.defaultView.getComputedStyle(el, "")[cssprop];
  } else { // try and get inline style
    return el.style[cssprop];
  }
}

调用时,它会给出此错误它给出此错误

NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle]
return document.defaultView.getComputedStyle(el, "")[cssprop];

所以函数调用是findOpacity(window.thirddiv,1) . findOpacity打电话给getStyle.findOpacity的代码是这样的:

function findOpacity(node, minValue) {
    if(node==document.body) {
        return getStyle(document.body, 'opacity') < minValue
            ? getStyle(document.body, 'opacity')
            : minValue;
    } else {
        return findOpacity(node.parentNode, getStyle(node.parentNode, 'opacity'))
            < minValue
            ? findOpacity(node.parentNode, getStyle(node.parentNode, 'opacity'))
            : minValue;
    }
}
我不知道

到底是什么导致了你的问题,但请尝试

function findOpacity(node, maxValue) {
    var val = node===document.body
        ? getStyle(document.body, 'opacity')
        : findOpacity(node.parentNode);
    if(maxValue !== void(0)) val = Math.min(val, maxValue);
    return +val;
}

请注意,您应该避免以下情况

getStyle(document.body, 'opacity') < minValue
    ? getStyle(document.body, 'opacity')
    : minValue;

因为你可以计算两次getStyle(document.body, 'opacity')。此外,minValue是最大值而不是最小值。

您的问题

问题是window.thirddiv不是html元素,而是XPC包装器。而且您不能将document.defaultView.getComputedStyle与 XPC 包装器一起使用。

我的猜测是你正在用特权编写一个GreaseMonkey脚本。然后,您应该阅读 http://wiki.greasespot.net/XPCNativeWrappers,并获取真正的 html 元素,请使用 window.thirddiv.wrappedJSObject .问题是您的代码将容易受到攻击,恶意脚本可能会访问特权方法,例如 GM_xmlhttpRequest .

如果您没有创建 GM 脚本,则可以使用 XPCNativeWrapper.unwrap(obj) 解开 XPC 包装器。同样,这是一种不安全的做法。