远程加载 Cordova/PhoneGap 应用程序

4
关于Cordova 3.4:
我在网络上看到了有关使用cordova/phonegap进行远程加载网页的各种帖子,但我无法使其正常工作。我阅读了Github上的问题#28#29以及其他各种帖子。
我正在通过config.xml中的内容设置直接加载url(下面的示例是在我的本地开发机器上,但无论我在公司防火墙内使用哪个url都没有影响)。我也试过使用window.location去访问该url,但也不起作用。
<content src="http://192.168.96.97:3004/#reference" />

页面加载正常,但deviceready事件不触发。仅限于cordova应用程序的www文件有效,远程文件无效。
deviceready has not fired after 5 seconds.    cordova.js?body=1:1117
Channel not fired: onCordovaInfoReady         cordova.js?body=1:1110
Channel not fired: onCordovaConnectionReady   cordova.js?body=1:1110

这是我的代码:

<html><head>
<title>Cordova Test</title>
<script src="cordova.js"></script>
<script src="cordova_plugins.js"></script>
<script src="plugins/org.apache.cordova.device/www/device.js"></script>
<script src="plugins/org.apache.cordova.geolocation/www/Coordinates.js"></script>
<script src="plugins/org.apache.cordova.geolocation/www/PositionError.js"></script>
<script src="plugins/org.apache.cordova.geolocation/www/Position.js"></script>
<script src="plugins/org.apache.cordova.geolocation/www/geolocation.js"></script>
<script src="plugins/org.apache.cordova.network-information/www/network.js"></script>
<script src="plugins/org.apache.cordova.network-information/www/Connection.js></script>
<script>

    // Wait for device API libraries to load
    function onLoad() {
        alert("onload..."); // this displays
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    // device APIs are available
    function onDeviceReady() { // this never fires
        // Now safe to use device APIs
        alert("deviceready...");
        console.log("deviceready...");
    }

</script>
</head>
<body onload="onLoad();" style="">
    hello! :)
</body></html>

谢谢!


对我来说,设备已准备就绪,但在调用例如PushNotification.initialize时,services.js中的window.plugins仍未定义。我已在Android上进行了测试,但尚未在iOS上进行。使用Cordova 4.0.0 / Ionic 1.2.8。 - mylord
你好,Jason,有没有成功让它工作。请查看:https://dev59.com/k4Xca4cB1Zd3GeqPDx8z - paul
我们决定使用从Rails项目导入的本地资源,并通过grunt任务进行处理。 - Jason Cochran
1个回答

0
不要等到onload事件触发后再添加deviceready事件监听器。我怀疑deviceready已经被触发,因此您的处理程序没有被调用。即使cordova没有加载,它也包含逻辑来触发在它加载之前注册的监听器。
另外,cordova会添加脚本标签来加载自己的依赖项,因此您只需要包含cordova.js脚本标签即可。

据我所知,即使在事件最初被触发后添加事件监听器,Cordova也会触发文档准备就绪事件。 - feupeu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接