我正在开发一个带有PhoneGap 2.0的Android应用程序,该应用程序在iframe中打开本地存储的Html。问题是,每当我尝试加载任何Html时,它都会显示,但应用程序会中断(不再执行Javascript)。这是我在logcat中得到的:
09-12 12:14:43.374: D/CordovaWebView(19771): >>> loadUrlNow()
09-12 12:14:43.394: D/CordovaLog(19771): JSCallback Error: Request failed.
09-12 12:14:43.394: D/CordovaLog(19771): file:///android_asset/www/js/lib/cordova-2.0.0.js: Line 3698 : JSCallback Error: Request failed.
09-12 12:14:43.394: I/Web Console(19771): JSCallback Error: Request failed. at file:///android_asset/www/js/lib/cordova-2.0.0.js:3698
09-12 12:14:43.414: D/DroidGap(19771): onMessage(onPageStarted,file:///storage/sdcard0/file.html)
09-12 12:14:43.584: D/chromium(19771): Unknown chromium error: -6
09-12 12:14:43.704: D/Cordova(19771): onPageFinished(file:///storage/sdcard0/file.html)
09-12 12:14:43.704: D/CordovaWebView(19771): >>> loadUrlNow()
09-12 12:14:43.714: D/DroidGap(19771): onMessage(onNativeReady,null)
09-12 12:14:43.714: D/DroidGap(19771): onMessage(onPageFinished,file:///storage/sdcard0/file.html)
编辑:
实际发生的是整个app html被文件替换。这就是Javascript没有执行的原因......没有Javascript。这说,有没有人知道如何避免这种行为?
答案 0 :(得分:0)
我找到了一个解决方案,虽然它不是最佳的......它包括更改Cordova / PhoneGap源代码并进行编译。我不知道这些修改的后果,只是它似乎有效。
要修改的文件是org.apache.cordova.CordovaWebViewClient.java。需要对一堆行进行注释并在最后返回false
。这是片段:
// All else
// else {
//
// // If our app or file:, then load into a new Cordova webview container by starting a new instance of our activity.
// // Our app continues to run. When BACK is pressed, our app is redisplayed.
// if (url.startsWith("file://") || url.indexOf(this.ctx.baseUrl) == 0 || ctx.isUrlWhiteListed(url)) {
// this.ctx.loadUrl(url);
// }
//
// // If not our application, let default viewer handle
// else {
// try {
// Intent intent = new Intent(Intent.ACTION_VIEW);
// intent.setData(Uri.parse(url));
// ctx.startActivity(intent);
// } catch (android.content.ActivityNotFoundException e) {
// LOG.e(TAG, "Error loading url "+url, e);
// }
// }
// }
// return true;
return false;
我从here
获得了解决方案