10/10/2018, 00:21
!%$^%$#@$ thằng Chrome :(
java Script trong Google Chrome xử lý XML khác hẳn với các trình duyệt cũ, nhưng khác thế nào thì chưa rõ. Các bác cùng nghiên cứu xem nào
1. Trước kia khi xử lý file XML trên trang xem tin nhanh tớ dùng 1 hàm như sau :
getxml sẽ load 1 file XML dựa trên URL của trang và tạo ra một đối tượng XMLDocument trong biến d rồi gọi hàm cArr có nhiệm vụ phân tích hồ sơ này, lấy ra giá trị các node để tạo thành menu dạng cây. Hàm này chạy tốt với cả IE lẫn Sa, Op và mấy thằng họ Mozilla.
Nhưng rồi thằng Google Chrome ra đời... Nó không hiểu gì cả !
Nó không xử lý theo cách của IE, vì không có ActiveXObject. Nó cũng không dùng đối tượng document.implementation nên không thể xử lý theo cách của các trình duyệt chuẩn W3C. Thế thì nó làm kiểu gì? Tôi không biết! Các bác nào biết, xin chỉ giáo
2.Khi đi tìm giải pháp chữa cháy, tôi nghĩ có thể dùng AJAX. Vậy là quyết định thêm vào hàm getxml 1 đoạn code như sau :
req.response_XML luôn null ! Tại sao lại thế ? Tôi không biết ! Bác nào đã tìm hiểu ra, xin chỉ giáo
(Tôi thêm dấu gạch dưới trong req.response_XML vì forum loại bỏ từ "s_e_x")
3. Nhưng nếu dùng AJAX trả về dạng text thì được. Có điều phải dùng DOMParser để convert ngược lại thành một XMLDocument để hàm cArr làm việc như bình thường.
Đó, lúc này thì mới chạy được. Nhưng sao lại rắc rối thế nhỉ ? Có con đường nào ngắn hơn mà Google Chrome đã mở ra, nhưng tôi còn chưa biết ? Bác nào đã tìm hiểu rồi, xin chỉ giáo
1. Trước kia khi xử lý file XML trên trang xem tin nhanh tớ dùng 1 hàm như sau :
PHP Code:
function getxml(){
var source=', d=null;
var s=document.location.search;
if(s!='){
var ss=s.replace("?","");
var a=ss.split('=');
if(a***91;0***93;=='nl'&&a***91;1***93;=='vi'{
source='feedVN.xml';
}
else{
source='feedIN.xml';
}
}
if(document.implementation&&document.implementation.createDocument){
d=document.implementation.createDocument("","",null);
d.load(source);
d.onload=function(){
cArr(d);
}
}
else if(window.ActiveXObject){
d=new ActiveXObject("Microsoft.XMLDOM");
d.async=false;
d.load(source);
cArr(d);
}
else{
window.location.href="error.htm";
}
}
Nhưng rồi thằng Google Chrome ra đời... Nó không hiểu gì cả !
Nó không xử lý theo cách của IE, vì không có ActiveXObject. Nó cũng không dùng đối tượng document.implementation nên không thể xử lý theo cách của các trình duyệt chuẩn W3C. Thế thì nó làm kiểu gì? Tôi không biết! Các bác nào biết, xin chỉ giáo
2.Khi đi tìm giải pháp chữa cháy, tôi nghĩ có thể dùng AJAX. Vậy là quyết định thêm vào hàm getxml 1 đoạn code như sau :
PHP Code:
if(isGC){
var req=new XMLHttpRequest();
req.open("GET", source, false);
req.send(null);
cArr(req.response_XML);
}
(Tôi thêm dấu gạch dưới trong req.response_XML vì forum loại bỏ từ "s_e_x")
3. Nhưng nếu dùng AJAX trả về dạng text thì được. Có điều phải dùng DOMParser để convert ngược lại thành một XMLDocument để hàm cArr làm việc như bình thường.
PHP Code:
if(isGC){
var req=new XMLHttpRequest();
req.open("GET", source, false);
req.send(null);
if(window.DOMParser){
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(req.responseText, "text/xml");
cArr(xmlDoc);
}
}
Bài liên quan
Thôi bỏ dùng kiểu load hồ sơ XML, cứ thay bằng AJAX cho khỏe
1 Bài toán thường có nhiều cách giải khác nhau..Hãy Làm theo cách mà bạn nghĩ là đơn giản nhất. đừng làm nó phức tạp hơn.. và nếu có thể hãy nghĩ ra cách giả mới hay hơn...
Các bác biết trang nào nói về Java Script engine trong Google Chrome không nhỉ
Cậu đang nói về chương trình nào hả Zoe, JS hay PHP ?