2013-07-18 32 views
0

我正在開發一個必須在本地工作的HTML5 Web應用程序。允許從Internet Explorer9訪問本地存儲的XML

是一個設計數據模型的應用程序,它應該解析來自XML格式良好的文件的表格信息並將它們呈現在html中。我想創建自定義視圖,告訴腳本從XML中通過URL中的GET參數傳遞他們的名字來解析表。

爲此,我使用jQUery的$.ajax方法,我在Firefox中開發它,一切都很順利。 但我需要它在IE9上工作,並使用$ .ajax和XMLHttpRequest我收到「訪問被拒絕」錯誤。

這裏腳本工作在Firefox:

$(document).ready(function() { 
    // // rilevo la stringa dell'URL che contiene i nomi delle tabelle da visualizzare 
    var query = window.location.search.substring(1); 
    // se c'è 
    if (query){ 
     // alert('query= '+query); 
     var tabelle = query.split('&'); 
     // alert('lunghezza array tabelle= '+tabelle.length); 

     $.ajax({ 
      type: "GET", 
      url: "tables.xml", 
      dataType: "xml", 
      async: false, 
      success: function(xml) { 
       alert('start loading tables'); 
       // var i_success = 0; 
       for(var i_success=0; i_success<tabelle.length; i_success++){ 
        $(xml).find('tabella').each(function(){ 
         // alert('pars+write tabella '+i_success+': id= '+tabelle[i_success]); 
         if ($(this).find('id').text() == tabelle[i_success]) { 
         var id = $(this).find('id').text(); 
          // //verifico che la tabella sia tra quelle passatemi nell'URL 
          // var found = $.inArray(id, tabelle) > -1; 
          var classe = $(this).attr('classe'); 
          var title = $(this).find('title').text(); 
          $('<div class="drag tab" id="'+id+'"></div>').html('<h2 class="th">'+title+'</h2>').appendTo('#content'); 
          var i_celle = 0; 

          $(this).find('cella').each(function() { 
           var id_cella = $(this).find('id_cella').text(); 
           var content = $(this).find('content').text(); 
           $('<div class="td '+id_cella+'">'+content+'</div>').appendTo('#'+id); 
           i_celle++; 
          }); 
         // continue; 
         } else { 
          return; 
         } 
        });// end find each 
       } //end for 
      },//end success 

      complete: function(){ 
       toggleFields(); 
       connections(); 
       toggleBg(); 
       alert('complete'); 
      },//end complete 
      error: function(richiesta,stato,errori){ 
       $("#content").html("<strong>Caricamento delle tabelle fallito:</strong><br/>"+stato+" "+errori); 
      }//end error 
     }); //end ajax 
    } else { 
     alert('Non sono state fornite tabelle da visualizzare...'); 
    } 

});` 

在這裏,我想實現對IE的代碼:

$(document).ready(function() { 

    // // rilevo la stringa dell'URL che contiene i nomi delle tabelle da visualizzare 
    var query = window.location.search.substring(1); 
    // se c'è 
    if (query){ 
     alert('query= '+query); 
     var tabelle = query.split('&'); 
     alert('lunghezza array tabelle= '+tabelle.length); 

     var xmlhttp; 
     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      alert('Questo browser supporta XMLHttpRequest! :)'); 
      xmlhttp=new XMLHttpRequest(); 
      alert('XMLHttpRequest creata con successo'); 

      xmlhttp.open("GET","tables.xml",true); 
      alert('richiesta aperta'); 
      xmlhttp.send(); 
      alert('Request inviata con successo'); 
     } else {// code for IE6, IE5 
      alert('XMLHttpRequest non supportata da questo browser'); 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

    } else { 
     alert('Non sono state fornite tabelle da visualizzare...'); 
    }// end if query 

}); // end document.ready 

誰能幫助我嗎?我越來越瘋狂..

+0

使用jQuery的好處之一是,您不必做任何特殊的事情就可以讓代碼在多個瀏覽器上運行。你不應該需要你所謂的IE代碼。運行在FF shoudl上的代碼適用於所有瀏覽器。如果它不存在,那麼您可以修復一個小錯誤,然後它將在所有瀏覽器上運行。 – RiggsFolly

+0

哦,是的,我知道。 jQuery做了很多控制,並確保了我的降級。 – marzolinus

+0

哦,是的,我知道。 jQuery做了很多控制,並確保了我的降級。 但我知道這個問題,這就是爲什麼我要重新編碼:IE阻止XMLHttprequest本地文件。 Firefox不。而且Chrome會阻止該塊,但是如果您通過命令行中的'--disable-web-security'選項來調用它,則允許本地文件訪問。 – marzolinus

回答

0

我設法解決。

我決定通過JSON對象INLINE傳遞所有數據。

你可以做到這一點的HTML DOM,使用

<script type="application/json" id="stuff> 

json code here 

</script> 

,並調用它使用 VAR myVar的= JSON.parse(的document.getElementById( '東西')的innerHTML。)JS; 這是HTML%有效:http://dev.w3.org/html5/spec/Overview.html#the-script-element

我決定把它直接寫在js中,並把它稱爲var。 var tabObj = {「tabelle」: json code }; 我必須明白,如果我不得不解析它,或者如果不是強制性的。

這就是所有人。感謝您的幫助,我知道這是一個奇怪的問題。