最近接到一個(gè)項(xiàng)目實(shí)例浮入,需要在客戶端內(nèi)嵌入網(wǎng)站頁面,首相想到的就是網(wǎng)站頁面樣式問題(是不是自適應(yīng)羊异,網(wǎng)站的訪問限制等)事秀。好那么最后得出的結(jié)論就是網(wǎng)站樣式功能在客戶端存在差異(客戶端實(shí)現(xiàn)瀏覽網(wǎng)頁方式是嵌入cef內(nèi)核-Google)
1.樣式覆蓋
2.動(dòng)態(tài)調(diào)整dom節(jié)點(diǎn)的寬高
$(document).ready(function(){
//樣式功能覆蓋
});
好的那就先簡(jiǎn)單的實(shí)現(xiàn)功能的顯示隱藏、樣式的動(dòng)態(tài)改變測(cè)試一下效果野舶,結(jié)果沒有預(yù)期的那么理想秽晚。頁面的腳本存在異步的請(qǐng)求問題(頁面的html存在異步加載),
這樣我們沒辦法用ready筒愚、onload監(jiān)聽頁面全部元素的加載,造成樣式的覆蓋失效菩浙。
那么接下來換一種思路 - setInterval clearInterval
var t = setInterval(function(){
if($('#...')){
//樣式功能覆蓋
clearInterval(t);
}
},200);
上述方式雖然可以監(jiān)聽頁面部分異步加載元素的完成狀態(tài)
這種輪循造成的開銷很大巢掺、另外頁面還是存在覆蓋的時(shí)間間隔問題等(覆蓋延遲)
正常的前端代碼開發(fā)規(guī)范不允許有setTimeout、setInterval等(除非特殊情況)
好的換一種思路
從輪循監(jiān)聽頁面的變化(是否有指定新生成的節(jié)點(diǎn)) 轉(zhuǎn)變?yōu)? 監(jiān)聽頁面元素的更新
$(document).ready(function(){
$(document.body).bind('DOMNodeInserted', function(e) {
var e = e.target || {};
var classWord = e.className || "";
if(classWord.indexOf("節(jié)點(diǎn)樣式")!=-1){
//樣式功能覆蓋
$(document.body).unbind("DOMNodeInserted");
}
});
});
注:本實(shí)例僅個(gè)人開發(fā)實(shí)踐過程劲蜻,如有不妥或更好建議請(qǐng)留言交流