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 :

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";
    }

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 :

PHP Code:
    if(isGC){
        var 
req=new XMLHttpRequest();
        
req.open("GET"sourcefalse);
        
req.send(null);
                
cArr(req.response_XML);
    } 
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.

PHP Code:
    if(isGC){
        var 
req=new XMLHttpRequest();
        
req.open("GET"sourcefalse);
        
req.send(null);
            if(
window.DOMParser){
                var 
parser=new DOMParser();
                var 
xmlDoc=parser.parseFromString(req.responseText"text/xml");
                
cArr(xmlDoc);
            }
    } 
Đó, 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

zoejoe viết 02:28 ngày 10/10/2018
Hè hè, em hok bik dùng dùng xml với javascript, chỉ bik mỗi json thui, nên hem giúp gì đựoc cho anh roài
sacroyant viết 02:31 ngày 10/10/2018
Được gửi bởi zoejoe
Hè hè, em hok bik dùng dùng xml với javascript, chỉ bik mỗi json thui, nên hem giúp gì đựoc cho anh roài
ừ, hic, càng đông con càng mệt

Thôi bỏ dùng kiểu load hồ sơ XML, cứ thay bằng AJAX cho khỏe
bka viết 02:25 ngày 10/10/2018
Được gửi bởi sacroyant
ừ, hic, càng đông con càng mệt

Thôi bỏ dùng kiểu load hồ sơ XML, cứ thay bằng AJAX cho khỏe
Nếu làm theo XML thì nó có chuẩn của nó.. thấy nó khoa xờ học hơn..còn nếu không cứ xử lý bóc tách hắn ra.. cách nào cũng okie hết
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...
sacroyant viết 02:36 ngày 10/10/2018
Được gửi bởi bka
Nếu làm theo XML thì nó có chuẩn của nó.. thấy nó khoa xờ học hơn..còn nếu không cứ xử lý bóc tách hắn ra.. cách nào cũng okie hết
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...
Hiện tại theo tớ JavaScript trong trình duyệt chỉ có 2 cách load nội dung file XML, thứ nhất là dùng XMLDocument Object Model, thứ 2 là dùng XMLHttpRequest. Vấn đề ở đây là thằng Chrome dường như xử lý khác với các trình duyệt cũ.

Các bác biết trang nào nói về Java Script engine trong Google Chrome không nhỉ
</3 viết 02:32 ngày 10/10/2018
Tớ tẩy chay XML, chỉ dùng JSON vừa nhẹ và nhanh, config thì dùng luôn YAML
sacroyant viết 02:35 ngày 10/10/2018
Được gửi bởi </3
Tớ tẩy chay XML, chỉ dùng JSON vừa nhẹ và nhanh, config thì dùng luôn YAML
Tớ thấy JSON cũng hay, nhưng hay với bản thân chương trình xử lý nó. Còn với người viết mã thì XML trực quan hơn nhiều
cái nick đó viết 02:22 ngày 10/10/2018
Đả đảo Chrome! Đả đảo các browser ko theo W3C standards!
zoejoe viết 02:30 ngày 10/10/2018
Được gửi bởi sacroyant
Tớ thấy JSON cũng hay, nhưng hay với bản thân chương trình xử lý nó. Còn với người viết mã thì XML trực quan hơn nhiều
Uh, nhưng cũng có cách chuyển từ xml sang json đó
sacroyant viết 02:26 ngày 10/10/2018
Được gửi bởi zoejoe
Uh, nhưng cũng có cách chuyển từ xml sang json đó
Tớ cũng tự viết được thôi. Nhưng mà... ừm, cũng được... JSON thì JSON chứ.

Cậu đang nói về chương trình nào hả Zoe, JS hay PHP ?

Được gửi bởi cái nick đó
Đả đảo Chrome! Đả đảo các browser ko theo W3C standards!
Công bằng mà nói thì nó cũng tuyệt hơn IE nhiều lần. Với tớ, nó nhỉnh hơn Opera và kém FF một chút. Chỉ là chưa quen với cách làm việc của nó.
Bài liên quan
0