2012-02-15 4 views
5

W moim other question dowiedziałem się, że nie ma białej listy dla telefonów z systemem Windows.Obejście dla brakującej białej listy w telefonie do telefonu z numerem Windows

Teraz szukam natywnego obejścia kodu, ale nigdy nie napisałem linii natywnego kodu dla telefonów z systemem Windows. Więc nie jest to dla mnie łatwe. Myślę, że mogę pobrać stronę podobną do tej:

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); 
} 

Ale jak uzyskać te dane do mojej aplikacji javascript?

Odpowiedz

11

Oto sposób obejścia tego problemu. Poniższy kod jest poleceniem Phonegap, które implementuje funkcję Cross Domain Call.

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); 

     } 
    } 
} 

testu po stronie klienta:


 <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! W Visual Studio dodałem nowy plik klasy 'Cdc.cs' i umieściłem w nim pierwszy blok kodu. Następnie umieściłem phonegap.js w moim pliku index.html i dodałem drugi blok kodu. Uruchomiłem aplikację i działało idealnie! Wielkie dzięki. Nie mógłbym tego zrobić bez ciebie! – PiTheNumber

+0

Proszę oddać głos w tej odpowiedzi. Całkowicie na to zasługuje! – PiTheNumber