cordova inappbower v3.0 內置瀏覽器常見問題總結(持續更新)

1、下載文件失敗

1.須要在請求頭傳遞cookie才能下載的文件,inappbower3.0版本是不支持傳cookie的,故會下載失敗(下載文件前須要詢問文件存儲權限並開啓)

解決方案:找到InAppBrowserDownloads.java,而且做以下修改java

import android.webkit.CookieManager;

protected void processDownload() {
        final String url = InAppBrowserDownloads.this.url;
        final String cookie = CookieManager.getInstance().getCookie(url);
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

        request.addRequestHeader("Cookie", cookie);
        request.addRequestHeader("User-Agent", InAppBrowserDownloads.this.userAgent);
        request.addRequestHeader("Referer", url);

        try {
            ……
        } catch (Exception exception) {
            ……
        }
    }
複製代碼

2、Chrome Developer Tools 調試不了內置瀏覽器打開的頁面

1.沒有開啓inAppWebView.setWebContentsDebuggingEnabled(true)

解決方案:找到InAppBrowser.java,而且將以下注釋去掉 說明:因爲開啓此特性會致使內置瀏覽器頁面信息被劫持,故通常都會註釋,僅供調試時開啓android

//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// inAppWebView.setWebContentsDebuggingEnabled(true);
//}
複製代碼

3、Android/Ios App & iframe兼容

1.Ios App frame中,而且在frame中有連接跳轉或者下載文件,當target屬性爲「_blank」時,會返回不了上級frame,由於safari11.1.1如下的版本對target支持不佳致使的

解決方案:ios

採用inappbower打開連接以解決,也就是window.open(url, method)web

2.Android App frame中,而且在frame中用inappbower下載文件,會出現白屏頁

解決方案:採用原生連接打開方式api

4、inappbower經常使用屬性

1.clearsessioncache(Boolean) 打開前是否清除內置瀏覽器保留的cookie

適用場景:app之內置瀏覽器的方式集成三方h5應用而且經過cookie傳遞用戶信息時,開啓屬性後當第二次是用另外的帳號打開三方h5頁面時候,就不會遇到三方應用中帳戶信息仍是上一我的的狀況瀏覽器

2.location(Boolean) 是否以有導航條方式打開

適用場景:當集成方不想暴露連接信息或者連接帶有敏感信息時,應以無導航條方式打開cookie

3.enableViewportScale(Boolean) 是否頁面可縮放

適用場景:當集成方是pc頁面時,此選項最好開啓session

4.zoom(Boolean) 是否顯示安卓縮放控件

適用場景:該屬性至關於enableViewportScale的拓展app

5、如何讓集成頁面方調用app中的inappbower

解決方案:提供一個sdk api以調用,簡單的說就是利用回調ui

6、集成方不肯意調用sdk api的狀況#

解決方案:不要打架,找雙方老闆和客戶溝通改動的利益成本和所須要的資源以及面臨的困境,通常來講,集成方的代碼都是針對pc端的,對移動端適配確定不友好,當對方集成到己方app中時,就應該考慮到移動適配的問題,以及可能須要配合改動的需求,若是集成方一味的甩鍋,不要着急,把問題一五一十的告訴上級,合情合理的話,讓經驗豐富的產品和領導處理,不要接到鍋立馬就甩。

7、ios app inappbower 頁面內的次級跳轉連接若帶有target="_blank",訪問後常會出現"load Error",而且返回按鈕失效

解決方案:找到CDVInAppBrowser.m,在didFailLoadWithError中將self.backButton.enabled置爲YES

- (void)webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error
{

    BOOL isLantuCall = [self isLantuCall:error];

    // log fail message, stop spinner, update back/forward
    NSLog(@"webView:didFailLoadWithError - %ld: %@", (long)error.code, [error localizedDescription]);

    //self.backButton.enabled = theWebView.canGoBack;
    //將這裏的返回強制容許 
    self.backButton.enabled = YES;
    self.forwardButton.enabled = theWebView.canGoForward;
    [self.spinner stopAnimating];


    //self.addressLabel.text = NSLocalizedString(@"Load Error", nil);
    //不想顯示Load Error的話能夠顯示成Load Completed之類讓用戶體驗更好,
    //由於不是真正的加載失敗,只是對target="_blank"跳轉的處理存在問題
    self.addressLabel.text = NSLocalizedString(@"Load Completed", nil);

    [self.navigationDelegate webView:theWebView didFailLoadWithError:error];
}
複製代碼

PS: 第一次在掘金上寫文章,入行快兩年了,從此想持續的推送這段時間來的收穫和總結,但願你們和本身都有所收穫而不是平淡無奇的上班下班,平時也在學點日語,愛好動漫,愛好遊戲,指望遇到更多志同道合的朋友,一塊兒努力!

相關文章
相關標籤/搜索