gpt4 book ai didi

jquery - 使用 .cssRules 访问跨域样式表

转载 作者:行者123 更新时间:2023-12-03 21:39:10 28 4
gpt4 key购买 nike

当我尝试访问外部域上托管的某些 CSS 文件时,我在 Firebug 中收到此错误:

Security error" code: "1000
rules = styleSheets[i].cssRules;

我使用的代码是:

$(document).ready(function () {
$("p").live('mousedown', function getCSSRules(element) {
element = $(this);
var styleSheets = document.styleSheets;
var matchedRules = [],
rules, rule;
for (var i = 0; i < styleSheets.length; i++) {
rules = styleSheets[i].cssRules;
for (var j = 0; j < rules.length; j++) {
rule = rules[j];
if (element.is(rule.selectorText)) {
matchedRules.push(rule.selectorText);
}
}
}
alert(matchedRules);
});
});

除了将所有 CSS 文件移至同一域之外,还有其他方法可以解决此问题吗?

最佳答案

此问题的唯一真正解决方案是首先使用 CORS 加载 CSS。通过使用 CORS XMLHttpRequest 从外部域加载 CSS,然后通过以下方式将responseText(在本例中实际上是responseCSS)注入(inject)到页面中:

function loadCSSCors(stylesheet_uri) {
var _xhr = global.XMLHttpRequest;
var has_cred = false;
try {has_cred = _xhr && ('withCredentials' in (new _xhr()));} catch(e) {}
if (!has_cred) {
console.error('CORS not supported');
return;
}
var xhr = new _xhr();
xhr.open('GET', stylesheet_uri);
xhr.onload = function() {
xhr.onload = xhr.onerror = null;
if (xhr.status < 200 || xhr.status >= 300) {
console.error('style failed to load: ' + stylesheet_uri);
} else {
var style_tag = document.createElement('style');
style_tag.appendChild(document.createTextNode(xhr.responseText));
document.head.appendChild(style_tag);
}
};
xhr.onerror = function() {
xhr.onload = xhr.onerror = null;
console.error('XHR CORS CSS fail:' + styleURI);
};
xhr.send();
}

这样,浏览器将把 CSS 文件解释为来自与主页响应相同的源域,现在您将可以访问样式表的 cssRules 属性。

关于jquery - 使用 .cssRules 访问跨域样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com