2012-02-15 15 views
5

私のother questionには、Windows Phone用のホワイトリストがありませんでした。Windows用phonegapのホワイトリストが見つからない場合の対処方法

今、私はネイティブコードの回避策を探していますが、Windows Phone用のネイティブコードの行を記述したことはありません。だから私にとっては簡単ではない。

void GetAirportData() 
{ 
    var url = new Uri("http://server.example.com/data.php", UriKind.Absolute); 
    var webClient = new WebClient(); 
    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 
    webClient.OpenReadAsync(url, url); 
} 

しかし、どのように私はJavaScriptのアプリには、このデータを取得することができます:私は、私はこのようなページをダウンロードすることができると思いますか?

答えて

11

これは回避策です。次のコードは、クロスドメインコール機能を実装するPhonegapコマンドです。クライアント側の

using System; 
using System.IO; 
using System.Net; 
using System.Runtime.Serialization; 
using WP7CordovaClassLib.Cordova; 
using WP7CordovaClassLib.Cordova.Commands; 
using WP7CordovaClassLib.Cordova.JSON; 

namespace Cordova.Extension.Commands //namespace is predefined, don't change it! 
{ 
    public class Cdc : BaseCommand //Cross domain call 
    { 
     [DataContract] 
     public class CdcOptions 
     { 
      [DataMember(Name = "path")] 
      public string Path { get; set; } 
     } 

     public void Call(string args) 
     { 
      CdcOptions options = JsonHelper.Deserialize<CdcOptions>(args); 

      var url = new Uri(options.Path, UriKind.Absolute); 

      var webClient = new WebClient(); 

      webClient.OpenReadCompleted += (s, e) => 
      { 
       if (e.Error != null) 
       { 
        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error")); 
        return; 
       } 

       //Stream -> string 
       var sr = new StreamReader(e.Result); 
       var result = sr.ReadToEnd(); 

       DispatchCommandResult(
        new PluginResult(PluginResult.Status.OK, result)); 
      }; 

      webClient.OpenReadAsync(url, url); 

     } 
    } 
} 

テスト:


 <script type="text/javascript"> 

      function cdc(path, success, fail) { 

       PhoneGap.exec(
          success, //success 
          fail, //fail 
          "Cdc", //service 
          "Call", //action 
          path //args 
          ); 
      }; 

      function onDeviceReady(e) { 

       cdc(
        { 
         path: "http://stackoverflow.com/questions/9291809/workaround-for-missing-whitelist-in-phonegap-for-windows-phone" 
        }, 
        function (arg) { 
         document.getElementById('test').innerHTML = arg; 
        }, function (arg) { 
         document.getElementById('test').innerHTML = arg; 
        }); 

      } 

      document.addEventListener("deviceready", onDeviceReady, false); 


     </script> 
    </head> 
    <body> 
     <div id="test"></div> 
    </body> 
</html> 
+0

50!私はVisual Studioで新しいクラスファイル 'Cdc.cs'を追加し、その中に最初のコードブロックを配置しました。次に、index.htmlにphonegap.jsを含め、2番目のコードブロックを追加しました。アプリを起動し、それは完全に働いた!どうもありがとう。あなたなしではできなかった! – PiTheNumber

+0

この回答に投票してください。彼は完全にそれに値する! – PiTheNumber

関連する問題