我构建了一个从Web上的外部xml文件加载统计信息的应用程序。
它在网络浏览器中运行良好。当我使用PhoneGap for Android打包它时,它也可以正常工作。 也适用于BlackBerry Playbook。
但是,当我将其打包为BlackBerry时,它不起作用。我已经尝试过WebWorks命令行工具和PhoneGap。
当我使用WebWorks打包并在模拟器上运行时
Web Inspector上的控制台给出了错误
“无法加载资源:服务器响应状态为500(请求资源时出错。)”
当我使用Phonegap打包并在模拟器上运行时
当我使用PhoneGap而不是WebWorks打包时,我会在警报中弹出以下错误...
gap : ["Network Status", "getConnectionInfo","Network Status0",true]
gap: ["Device","getDeviceInfo","Device1",true]
gap_init:
gap_callbackServer:
gap_poll:
Live version of App(未编译)
ZIP file to run in WebWorks or Phonegap
Youtube Video of Problem in BlackBerry Simulator
我尝试过的事情
我已添加到配置文件中。
<access subdomains="false" uri="*"/>
我添加了$ .support.cors函数suggested by phonegap。
$( document ).bind( "mobileinit", function() {
// Make your jQuery Mobile framework configuration changes here!
$.mobile.allowCrossDomainPages = true;
});
答案 0 :(得分:8)
您的模拟器和WebWorks SDK是最新的吗?
我已经在2.0.1.358的现场PlayBook和2.0.0.7971的模拟器上进行了测试,没有遇到任何问题。
我使用2.2.0.15 WebWorks for PlayBook SDK打包,我唯一改变的是config.xml中的id,包装器中没有接受带点的。
好的,现在我明白了问题所在。
这是相当模糊的,但Java智能手机SIM卡设置为与另一个称为MDS模拟器的旧模拟器工具一起使用。对于大多数事情来说,这并不是必需的,但提供类似于设备在企业BES环境中看到的网络。模拟器认为即使MDS模拟器没有运行,它也始终具有所谓的“MDS”连接。
使用WebWorks应用程序,如果使用没有<rim:connection>
标记的默认config.xml文件(对于大多数情况来说完全没问题),它会在TCP选项之前优先考虑MDS。这是一个问题,因为sim认为它实际上没有MDS连接,并且连接尝试最终失败。
如果将以下位代码添加到config.xml中,它将降低MDS的优先级,并使其正常工作。
<rim:connection timeout="60000">
<id>BIS-B</id>
<id>TCP_WIFI</id>
<id>TCP_CELLULAR</id>
<id>MDS</id>
<id>WAP2</id>
<id>WAP</id>
</rim:connection>
最后一个关键项目 - 你需要设置模拟器才能使用模拟的wifi网络。单击主屏幕的顶部横幅(通过无线指示灯),然后打开Wifi,并在选项和状态中单击Wi-Fi网络。然后单击默认WLAN网络并完成相关步骤。
答案 1 :(得分:1)
我认为这与webworks.js
末尾附近的设置调用有关。我不知道你在哪里有这个图书馆,但它似乎有点旧。
WebWorks应自动公开您在配置文件中请求的javascript API(即:window.blackberry.*
),而无需像http://localhost:8472/blackberry/extensions/get
那样提出请求。
由于您只是进行ajax调用,我将放弃所有这些并专注于调试您的ajax代码。
PS:Phonegap在WebWorks上运行,因此进一步抽象不太可能解决您的问题。
答案 2 :(得分:0)
它看起来像跨源资源共享问题。您可能必须使用CORS
在服务器端启用它:http://enable-cors.org/
在您的javascript中,使用此来请求远程内容:
// Create the XHR object.
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// XHR for Chrome/Safari/Firefox.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// XDomainRequest for IE.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// CORS not supported.
xhr = null;
}
return xhr;
}
// Make the actual CORS request.
function makeCorsRequest() {
var url = "http://www.example.com/";
var xhr = createCORSRequest('GET', url);
if (!xhr) {
alert('CORS not supported');
return;
}
// Response handlers.
xhr.onload = function() {
var text = xhr.responseText;
// Do something with returned text data
};
xhr.onerror = function() {
alert('Woops, there was an error making the request.');
};
xhr.send();
}