【问题标题】:Allow access to a locally stored XML from Internet Explorer9允许从 Internet Explorer 9 访问本地存储的 XML
【发布时间】:2013-07-17 11:29:42
【问题描述】:

我正在开发一个必须在本地运行的 HTML5 网络应用程序。

是一个设计数据模型的应用程序,它应该从 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

谁能帮帮我?我快疯了..

【问题讨论】:

  • 使用 jQuery 的好处之一是您无需执行任何特殊操作即可让代码在多个浏览器上运行。你不应该需要你所谓的 IE 代码。在 FF 上运行的代码应该适用于所有浏览器。如果没有,您可以修复一个小错误,然后它将在所有浏览器上运行。
  • 哦,是的,我知道。 jQuery 为我做了很多控制并确保降级。
  • 哦,是的,我知道。 jQuery 为我做了很多控制并确保降级。但我知道问题所在,这就是我尝试重新编码的原因:IE 将 XMLHttprequest 阻止到本地文件。火狐没有。 Chrome 会阻止,但如果您从命令行使用“--disable-web-security”选项调用它,则允许本地文件访问。
  • 你的意思是你没有使用网络服务器?
  • 是的。我的意思是我正在创建一个本地网络应用程序。它必须存储在磁盘上,没有网络服务器。只需要通过网络浏览器打开。不幸的是,我必须在 URL 字符串中传递一些参数(每个数据模型视图只加载我在字符串中传递的表),并且链接必须从嵌入在缩放插件中的 SWF 开始,该插件只能在 IE 中正常工作。非常混乱,我别无选择,因为我正在处理另一个人的工作。

标签: html xml internet-explorer xmlhttprequest


【解决方案1】:

我设法解决了。

我决定将所有数据传递到一个 JSON 对象 INLINE 中。

您可以在 HTML DOM 中使用

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

json code here

</script>

并在 js 中使用 var myVar=JSON.parse(document.getElementById('stuff').innerHTML); 这是 HTML% 有效:http://dev.w3.org/html5/spec/Overview.html#the-script-element。

我决定直接写在js里,像var一样调用。 var tabObj = {"tabelle": json代码 }; 我必须了解是否必须解析它或者是否不是强制性的。

这就是所有人。感谢您的帮助,我知道这是一个奇怪的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多