我目前正在写的VLC媒体播放器遥控。 我使用http-webinterface连接和控制服务器。 由于2.1.0版VLC需要设置密码。 这本身是没有问题的。 我用下面的Ajax请求解决它
checkConnection = function(id, folder){
$.ajax({
url: 'http://' + data.ip + ":" + data.port + '/requests/status.xml',
headers: {
"Authorization" : "Basic " + data.authorization
},
timeout: 3000,
success: function (data, status, jqXHR) {
//Yeah do stuff
}
},
error: function(data){
//Ohh, do stuff
}
});
};
如果我连接到使用我的电脑VLC HTTP接口有这个标准弹出问我的用户名和密码。 我的问题现在的问题是,如果在data.authorization令牌是错误的,应用程序(使用手机)崩溃。 如果有波纹(使用Chrome)中提到的弹出窗口显示,但超时工作,在我的错误处理踢测试这不是对我的Windows Phone的情况下 - 在这里我的应用程序挂起(如前所述)。 我怀疑,既然是网页视图WP试图显示弹出,但失败。 话又说回来,超时应该踢?
难道你们有同样的问题,如果是的话你是怎么解决的呢?
终于解决了。 这是很容易的,只需要编写C#中的插件。 我将连接的代码,任何人谁可能会遇到同样的问题。
using System;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Text;
using System.Windows.Threading;
using WPCordovaClassLib.Cordova;
namespace WPCordovaClassLib.Cordova.Commands
{
public class BasicAuth : BaseCommand
{
//Create timer to control timeout
DispatcherTimer timeoutTimer = new DispatcherTimer();
WebClient webClient = new WebClient();
public BasicAuth(){
timeoutTimer.Interval = TimeSpan.FromSeconds(5);
timeoutTimer.Tick += new EventHandler(timeout);
timeoutTimer.Start();
}
public void get(string options)
{
//Parse data that gets passed into the plugin
string[] passedData = JSON.JsonHelper.Deserialize<string[]>(options);
string ip = passedData[0];
string port = passedData[1];
string username = passedData[2];
string password = passedData[3];
try
{
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
string credentials = String.Format("{0}:{1}", username, password);
byte[] bytes = Encoding.UTF8.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
webClient.Headers["Authorization"] = authorization;
string url = //your url here
var uri = new Uri(url);
webClient.DownloadStringAsync(uri);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Data);
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ""));
timeoutTimer.Stop();
}
}
void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try{
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, e.Result)); //e.Result will fail if the server couldn't be contacted
} catch{
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, ""));
}
}
private void timeout(Object sender, EventArgs e)
{
webClient.CancelAsync(); //Cancel Async download
timeoutTimer.Stop(); //Stop timer from beeing executed again
}
}
}
这里是你想从你的JavaScript调用位:
cordova.exec(connectionSuccess, connectionError, "BasicAuth", "get", [data]);