Phonegap - 本地文件在主视图中打开,而不是在iframe中打开

时间:2012-09-12 10:31:25

标签: android iframe cordova

我正在开发一个带有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。这说,有没有人知道如何避免这种行为?

1 个答案:

答案 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

获得了解决方案