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: 第一次在掘金上写文章,入行快两年了,从此想持续的推送这段时间来的收获和总结,但愿你们和本身都有所收获而不是平淡无奇的上班下班,平时也在学点日语,爱好动漫,爱好游戏,指望遇到更多志同道合的朋友,一块儿努力!

相关文章
相关标签/搜索