Android的瀏覽器不支持 「的onload」/ 「的onreadystatechange」 爲元素的事件:http://pieisgood.org/test/script-link-events/
但它返回:
"onload" in link === true
所以,我的解決方案是從的userAgent發現Android瀏覽器,然後等待樣式表中的一些特殊的css規則(例如,重置「body」邊距)。
如果不是Android瀏覽器,它支持 「的onload」 事件 - 我們將使用它:
var userAgent = navigator.userAgent,
iChromeBrowser = /CriOS|Chrome/.test(userAgent),
isAndroidBrowser = /Mozilla\/5.0/.test(userAgent) && /Android/.test(userAgent) && /AppleWebKit/.test(userAgent) && !iChromeBrowser;
addCssLink('PATH/NAME.css', function(){
console.log('css is loaded');
});
function addCssLink(href, onload) {
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", href);
document.head.appendChild(css);
if (onload) {
if (isAndroidBrowser || !("onload" in css)) {
waitForCss({
success: onload
});
} else {
css.onload = onload;
}
}
}
// We will check for css reset for "body" element- if success-> than css is loaded
function waitForCss(params) {
var maxWaitTime = 1000,
stepTime = 50,
alreadyWaitedTime = 0;
function nextStep() {
var startTime = +new Date(),
endTime;
setTimeout(function() {
endTime = +new Date();
alreadyWaitedTime += (endTime - startTime);
if (alreadyWaitedTime >= maxWaitTime) {
params.fail && params.fail();
} else {
// check for style- if no- revoke timer
if (window.getComputedStyle(document.body).marginTop === '0px') {
params.success();
} else {
nextStep();
}
}
}, stepTime);
}
nextStep();
}
演示:http://codepen.io/malyw/pen/AuCtH
如何使用[聽真實事件](HTTPS://developer.mozilla。 org/en-US/docs/DOM/element.addEventListener)而不是DOM0垃圾? –
添加鏈接到dom(無錯誤,樣式表從不加載)後,這不適用於移動設備:document.getElementById(「my_rel」)。addEventListener('load',prepClasses,false); – Amalgovinus