4

我已经构建了一个应用程序,它从网络上的外部 xml 文件加载统计信息。

它在网络浏览器中运行良好。当我将它与 Android 的 PhoneGap 打包时,它也可以正常工作。也适用于 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:

应用程序的实时版本(未编译)

在 WebWorks 或 Phonegap 中运行的 ZIP 文件


类似的未回答的问题


黑莓模拟器中的问题的 Youtube 视频


我尝试过的事情

我已经添加到我的配置文件中。

<access subdomains="false" uri="*"/>

我添加了phonegap 建议的 $.support.cors函数。

$( document ).bind( "mobileinit", function() {
    // Make your jQuery Mobile framework configuration changes here!
    $.mobile.allowCrossDomainPages = true;
});
4

3 回答 3

8

您的模拟器和 WebWorks SDK 是最新的吗?

我已经在带有 2.0.1.358 的实时 PlayBook 和 2.0.0.7971 的模拟器中进行了测试,没有看到任何问题。

我用 2.2.0.15 WebWorks for PlayBook SDK 打包,我唯一改变的是 config.xml 中的 id,它在带点的打包程序中不被接受。


好的,现在我明白问题所在了。

它非常晦涩难懂,但 Java 智能手机模拟程序已设置为与另一个名为 MDS 模拟器的旧模拟器工具一起使用。对于大多数事情来说,这并不是真正必要的,但它提供的网络类似于设备在企业 BES 环境中看到的网络。即使 MDS 模拟器没有运行,模拟器也相信它一直都有所谓的“MDS”连接。

对于 WebWorks 应用程序,如果您使用不带<rim:connection>标签的默认 config.xml 文件(这在大多数情况下完全可以),它会将 MDS 优先于 TCP 选项。这是一个问题,因为 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 网络并通过相关步骤进行关联。

于 2012-06-07T19:09:00.097 回答
1

我认为这与您的webworks.js. 我不确定你从哪里得到这个图书馆,但它似乎有点旧。

WebWorks 应该自动公开您在配置文件中请求的 javascript API(即:),window.blackberry.*而无需像您必须那样发出请求http://localhost:8472/blackberry/extensions/get

由于您只是在进行 ajax 调用,因此我将放弃所有这些并专注于调试您的 ajax 代码。

PS:Phonegap 在 WebWorks 之上工作,因此进一步抽象事物不太可能解决您的问题。

于 2012-06-01T16:28:25.087 回答
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();
}

来自: http: //supportforums.blackberry.com/t5/Web-and-WebWorks-Development/AJAX-from-external-website-not-working/mp/1736733#M24128

于 2012-06-04T12:46:55.110 回答