[英]Testing for IE8 compatibility problems
TL; DR:如何在我的網站上測試IE8的兼容性問題?
我為學校創建了一個網站,該網站可用於我測試過的所有瀏覽器,但<= IE8除外。
發生了什么,我已經嘗試過:
為了進行測試,我使用的是IE11的仿真模式,但是在真正的IE8瀏覽器中我遇到了相同的行為。
我正在使用jQuery 1.11,它支持IE的舊版本。
我真的不能提供代碼,因為有很多,但是我將任何具有粗略瀏覽器支持的東西都傳遞給了jQuery(已通過www.caniuse.com驗證),並且再次,我沒有收到任何表明找不到某種方法。
通過此描述,是否有人知道可能出了什么問題,或者我還可以如何診斷問題?
我以為調試時一切都很順利,但是我想這會教會我在工作時進行調試。
我將其范圍縮小為以下代碼:
Resolvable: function() {
var isResolved = false;
var onResolve;
this.resolve = function() {
isResolved = true;
if (typeof onResolve !== 'undefined') {
onResolve();
}
};
this.setOnResolve = function(f) {
if (isResolved) {
f();
} else {
onResolve = f;
}
}
在setOnResolve
內部,進入else
塊,進行分配,並且一切都停止加載(“ watch”面板清空,並且我添加的所有手動手表都顯示為“ not available”)。
setOnResolve
在這里被調用:
/**
* Runs each of the {@SuspendedLoader}s, in the order that they're given.
*
* @param {SuspendedLoader[]} seqOfSuspLoaders An array of {@link SuspendedLoader}s
*/
runLoadersInOrder: function(seqOfSuspLoaders) {
if (seqOfSuspLoaders.length < 1) return;
var currentLoader = seqOfSuspLoaders[0];
var restLoaders = seqOfSuspLoaders.slice(1);
var advance = Loaders.PageLoader.runLoadersInOrder;
var loaderPromise = currentLoader.runLoader();
if (loaderPromise instanceof Loaders.Helpers.Resolvable) {
loaderPromise.setOnResolve(function() { //<--- HERE
advance(restLoaders);
});
} else {
loaderPromise.then(
function() {
advance(restLoaders);
},
function() {
throw new Error("Couldn't run loader (" + currentLoader.constructor.name + "): ");
}
)
}
},
但是,我在runLoadersInOrder
每一行上都設置了斷點,並且代碼從不超過對setOnResolve
的調用。 我進入setOnResolve
,發生onResolve
分配,然后退出。
我意識到問題實際上是runLoadersInOrder
完全退出而不是runLoadersInOrder
退出。 我會繼續玩。
我解決了 我沒有在可能的情況下向jQuery添加事件處理程序,但是卻忽略了處理jQuery腳本標簽onload
事件的情況,該事件顯然在舊IE中不會觸發。 這個功能確實是個問題:
/**
* Loads a script without using jQuery by inserting a script tag into the page.
*
* @param path The folder the scripts are in.
* @param scriptName The name of the script to load.
* @returns {Resolvable} A {@link Resolvable} indicating when the script tag is loaded.
*/
Loaders.ScriptLoader.loadJQuery = function(path, scriptName) {
var firstExistingScript = document.body.getElementsByTagName('script')[0];
var script = Loaders.ScriptLoader.createScript(path, scriptName);
document.body.insertBefore(script, firstExistingScript);
var res = new Loaders.Helpers.Resolvable();
script.onload = function() {
$.ajaxSetup({cache: true});
res.resolve();
});
return res;
};
請注意我如何使用onload
來檢查是否完成,這與IE的舊版本不兼容。 我將該部分更改為:
Loaders.Helpers.attachOnLoad(script, function() {
$.ajaxSetup({cache: true});
res.resolve();
});
其中attachOnLoad
=
attachOnLoad: function(element, f) {
if (typeof element.onload === 'undefined') {
element.onreadystatechange = function() {
if (element.readyState === 'loaded') {
f();
}
};
} else {
element.onload = f;
}
},
出於某種原因,就緒狀態永遠不會變得complete
,而是會變為已loaded
。 我需要做進一步的測試,以確保其持續加載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.