Javascript 跨域资源共享(CRO)似乎不存在';无法在PhoneGap中的Windows Phone 8上工作

Javascript 跨域资源共享(CRO)似乎不存在';无法在PhoneGap中的Windows Phone 8上工作,javascript,cordova,windows-phone-8,Javascript,Cordova,Windows Phone 8,我有一个PhoneGap项目,它在Android平台上运行得非常好,但它不在WP8上运行 加载index.html(创建项目时创建的默认页面)后,我将页面重定向到一个名为_layout.html的新页面 这里是index.js(这是PhoneGap内置代码,不是我的),它有我的代码用于重定向到我的页面 var app = { // Application Constructor initialize: function() { this.bindEvents();

我有一个PhoneGap项目,它在Android平台上运行得非常好,但它不在WP8上运行

加载index.html(创建项目时创建的默认页面)后,我将页面重定向到一个名为_layout.html的新页面

这里是index.js(这是PhoneGap内置代码,不是我的),它有我的代码用于重定向到我的页面

var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // `load`, `deviceready`, `offline`, and `online`.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of `this` is the event. In order to call the `receivedEvent`
    // function, we must explicity call `app.receivedEvent(...);`
    onDeviceReady: function() {
        app.receivedEvent('deviceready');


        // THIS IS THE ONLY CODE I WROTE IN THIS BUILT-IN JAVASCRIPT CODE
        window.setInterval(function () {
            window.location.href = '_layout.html';
        }, 3000);
       //---------------MY CODE ENDS--------------------------------------

    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
    }
};
以下是_layout.html的代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" />
    <link rel="stylesheet" type="text/css" href="css/index.css" />
    <title>MyApp</title>

</head>

<body onload="loadPage('_resultlist.html');">
    <div class="panel">
        <div class="row" id="Title" style="text-align: center; vertical-align: central; position: relative; left: -6%; top: 10%; margin-bottom: -30px; margin-top: -20px;">
            <img src="img/logo.png" style="width: 150px; height: 100px; text-align: center; vertical-align: central;" />
        </div>
        <hr />
        <div id="franva" style="height: 300px; display:inline-block; width: 300px;">
        </div>
        <hr />
        <div id="search" style="text-align: center;">
            <input type="button" class="searchbutton" title="Search" value="Search" />
        </div>
    </div>
    <script type="text/javascript" src="js/jquery-2.0.3.js"></script>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript">
        function loadPage(url, onleave, onenter) {
            console.log("loadPage(" + url + ")");

            // If onleave function specified
            if (onleave) {
                onleave();
            }

            var xmlhttp = new XMLHttpRequest();

            // Callback function when XMLHttpRequest is ready
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState === 4) {
                    if (xmlhttp.status === 200) {
                        console.log("Received content" + xmlhttp.responseText);
                        $("#franva").html(xmlhttp.responseText);
                        // If onenter function specified
                        if (onenter) {
                            onenter();
                        }
                    }
                    else {
                        $("#franva").html("Error loading page " + url);
                    }
                }
            };
            xmlhttp.open("GET", url, true);
            xmlhttp.send();
        }

        jQuery.isUnsafe = true;

        function loadPageAjax(pageurl)
        {
            $.ajax({
                url: pageurl,
                context: document.body,
                dataType: "html"
            }).done(function (data) {
                alert("Ajax data = " + data);
                $("#franva").html(data);
            });
        }

        </script>
</body>

</html>

MyApp


函数加载页(url、onleave、oneter){ log(“loadPage(“+url+”)); //如果指定了onleave函数 如果(onleave){ onleave(); } var xmlhttp=new XMLHttpRequest(); //XMLHttpRequest就绪时的回调函数 xmlhttp.onreadystatechange=函数(){ if(xmlhttp.readyState==4){ if(xmlhttp.status==200){ log(“接收到的内容”+xmlhttp.responseText); $(“#franva”).html(xmlhttp.responseText); //如果指定了onenter函数 if(onenter){ onenter(); } } 否则{ $(“#franva”).html(“错误加载页面”+url); } } }; open(“GET”,url,true); xmlhttp.send(); } jQuery.isUnsafe=true; 函数loadPageAjax(pageurl) { $.ajax({ url:pageurl, 上下文:document.body, 数据类型:“html” }).完成(功能(数据){ 警报(“Ajax数据=”+数据); $(“#franva”).html(数据); }); }
正如您所看到的,这个页面有一个名为“franva”的div,它将另一个页面_resultlist.html加载到此div中

以下是_resultlist.html的代码

<div id="result-list" style="width: 100%;">
    <div class="result-row">
        <div class="left">
            <img src="img/tv1.jpg" />
        </div>
        <div class="right">
            <p><strong>Samsung XT7290</strong></p>
            <p>27 inch,  AU$ 1777</p>
        </div>
    </div>

    <div class="result-row">
        <div class="left">
            <img src="img/tv2.jpg" />
        </div>
        <div class="right">
            <p><strong>Samsung XT7290</strong></p>
            <p>27 inch,  AU$ 1777</p>
        </div>
    </div>

    <div class="result-row">
        <div class="left">
            <img src="img/tv3.jpg" />
        </div>
        <div class="right">
            <p><strong>Samsung XT7290</strong></p>
            <p>27 inch,  AU$ 1777</p>
        </div>
    </div>
</div>

三星XT7290

27英寸,1777澳元

三星XT7290

27英寸,1777澳元

三星XT7290

27英寸,1777澳元

我只创建了这两个页面,仅此而已

我在PhoneGap上运行了一个云构建构建网站来生成Android应用程序,它可以在我的Android手机上运行。无法安装联机生成的Windows Phone应用程序(它会弹出一条错误消息:无法安装此公司应用程序…)

所以我在VisualStudio2012中构建了它。但无法加载div franva的内容

我浏览了PhoneGap文档,它说CORS在PhoneGap中不是问题,因为它有一个运行代码的WebBrowser底层。一个安卓系统确实如此,但为什么不在WindowsPhone8上呢

整个想法是要有一个布局页面,这样我就不需要一次又一次地编写重复的布局部分代码。html页面用作div的内容,它可以被任何其他资源(如通过Ajax调用获取的数据)替换

此外,我还研究了WP 8中使用的IE版本,答案是IE 10。 关于IE10,有人说它支持CORS,有人说不……我很困惑

我在这个问题上纠缠了好几天

如果有人能为我指出正确的道路,我将不胜感激


提前谢谢。

我得到了问题的答案

只需在Web.config中添加下面的代码

  <system.webServer>
   <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
        </customHeaders>
    </httpProtocol>
  </system.webServer>

但这仅适用于您有权访问要检索信息的网站的情况。 如果你没有,那么就编写你自己的C#代码来实现这一点,并将其作为WebAPI公开,供你的移动应用程序使用


我希望这对有同样问题的人有帮助。

oooooops…我们的专家在哪里???你有没有得到过这个问题的答案?@ObjectReference,没有,我没有。我试图写尽可能详细的答案,但不幸的是,没有人在这个网站上知道答案…+1的问题努力!我还需要一个答案,所以如果我有什么想法,我会让你知道:-)@Tur-Hi-Tur,我已经解决了这个问题。请看我的帖子。干杯:)