QString QWebElement::styleProperty(const QString &name, StyleResolveStrategy strategy) const { if (!m_element || !m_element->isStyledElement()) return QString(); int propID = cssPropertyID(name); if (!propID) return QString(); CSSStyleDeclaration* style = static_cast<StyledElement*>(m_element)->style(); if (strategy == InlineStyle) return style->getPropertyValue(propID); if (strategy == CascadedStyle) { if (style->getPropertyPriority(propID)) return style->getPropertyValue(propID); // We are going to resolve the style property by walking through the // list of non-inline matched CSS rules for the element, looking for // the highest priority definition. // Get an array of matched CSS rules for the given element sorted // by importance and inheritance order. This include external CSS // declarations, as well as embedded and inline style declarations. DOMWindow* domWindow = m_element->document()->frame()->domWindow(); if (RefPtr<CSSRuleList> rules = domWindow->getMatchedCSSRules(m_element, "")) { for (int i = rules->length(); i > 0; --i) { CSSStyleRule* rule = static_cast<CSSStyleRule*>(rules->item(i - 1)); if (rule->style()->getPropertyPriority(propID)) return rule->style()->getPropertyValue(propID); if (style->getPropertyValue(propID).isEmpty()) style = rule->style(); } } return style->getPropertyValue(propID); } if (strategy == ComputedStyle) { if (!m_element || !m_element->isStyledElement()) return QString(); int propID = cssPropertyID(name); RefPtr<CSSComputedStyleDeclaration> style = computedStyle(m_element); if (!propID || !style) return QString(); return style->getPropertyValue(propID); } return QString(); }