2013-09-24 42 views
1

我有一個在Android平臺上運行得非常好的PhoneGap項目,但它不能在WP8上運行。跨域資源共享(CROS)在PhoneGap的Windows Phone 8上似乎不起作用

在加載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> 

代碼正如你可以看到這個頁面有一個div其稱爲「franva」,它加載另一個頁面,_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> 

我只創建了這2頁,沒有什麼比他們更多的代碼。(哦,如果計數還包括jQuery的。)

我跑了雲構建在PhoneGap Build網站上生成Android應用程序,並在我的Android手機上運行。在線生成的Windows Phone應用程序無法安裝(它彈出錯誤消息:無法安裝此公司應用程序....)

因此,我在Visual Studio 2012中構建它。但div franva的內容無法加載。

我經歷了PhoneGap文檔,它說CORS在PhoneGap中不是問題,因爲它具有運行代碼的WebBrowser底層。這是一個真正的Android,但爲什麼不在Windows Phone 8上?

整個想法是有一個佈局頁面,所以我不需要一次又一次地寫出重複的佈局零件代碼。 _resultlist.html頁面用作div的內容,它可以被任何其他資源(如通過Ajax調用獲取的數據)替代。

此外,我已經做了一個關於IE8版本在WP8中使用的研究,答案是IE10。 關於IE10,有人說它支持CORS,其他人說不....我很困惑。 ...

我一直在這個問題上堅持了幾天。

真的很感謝,如果有人能爲我指出正確的道路。

在此先感謝。

+0

ooooooops ...我們的專家在哪裏? – Franva

+0

第2天,你好~~~? – Franva

+0

你有沒有得到答案? – Apqu

回答

0

我得到了我的問題的解決方案。

只需添加下面的代碼在你的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,以供你的移動應用程序使用。

我希望對有同樣問題的人有幫助。