0

我正在使用 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)

编辑:

实际发生的情况是,整个应用程序 html 被文件替换。这就是 Javascript 没有执行的原因……没有 Javascript。这就是说,有谁知道如何避免这种行为?

4

1 回答 1

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; 

我从这里得到了解决方案

于 2012-09-12T13:15:06.947 回答