美文网首页
[Mtk][M0] 浏览器保存离线页面失败

[Mtk][M0] 浏览器保存离线页面失败

作者: 灰灰手记 | 来源:发表于2016-09-28 20:57 被阅读243次
说明:

下面将要说的MtkBrwoser,是指在vender/mediatek目录下的Browser应用。


现象:

在使用MtkBrowser浏览网页时,选择 Save for offline reading 功能,提示 Failed to save web page.

MTK解决方法1

优点:安全,不用担心修改 GMS,影响 CTS 测试,也不用担心 MtkBrowser 有什么别的问题了,一劳永逸。
缺点:Chrome 的可定制性太差,客户不一定接受。

4、MTK 基于 L 平台的解决方法:
修改:
vendor\google\apps\WebViewGoogle\Android.mk
注释掉前面提到的代码:
#LOCAL_OVERRIDES_PACKAGES :=webview

修改:
/frameworks/base/core/java/android/webkit/WebViewFactory.java
getWebViewPackageName 方法,修改为:

public static String getWebViewPackageName() {
        //return AppGlobals.getInitialApplication().getString(
        //        com.android.internal.R.string.config_webViewPackageName);

        Application initialApplication = AppGlobals.getInitialApplication();
        if(initialApplication.getPackageName().equals("com.android.browser")){
            return "com.android.webview";
        } else{
            return initialApplication.getString(com.android.internal.R.string.config_webViewPackageName);
        }
}

优点:MTK 提供的方法,可靠性相对较高。而且有 HTMLViewer 乱码现象时,只需要多加一个判断,包名写 HTMLViewer 的包名就好。
缺点:可能影响 CTSGTS 测试。
PS:经验证不可行,至少在 M 平台不可行。

5、自己的方法:
在上述第 4MTK 的方法的基础上,接着修改:
\frameworks\base\core\java\android\webkit\WebView.java

插入如下 START 和 END 标识的代码即可。

private void initChromiumClassIfNeccessary() {
        if (mCls != null) {
            return;
        }
        try {
            Application initialApplication = AppGlobals.getInitialApplication();
            if (initialApplication == null) {
                throw new ReflectiveOperationException("Applicatin not found");
            }
            String packageName = initialApplication.getString(
                    com.android.internal.R.string.config_webViewPackageName);

            /// START. By Xia.Fei, 20160929. Save for offline reading.
            String callerPkgName = initialApplication.getPackageName();
            Log.e("XIAFEI", "WV >> initChromiumClassIfNeccessary, callerPkgName = "+callerPkgName);
            if(callerPkgName.equals("com.android.browser")){
                packageName = "com.android.webview";
            }
            /// END. By Xia.Fei, 20160929. Save for offline reading.

            Context webViewContext = initialApplication.createPackageContext(packageName,
                    Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
            initialApplication.getAssets().addAssetPath(
                    webViewContext.getApplicationInfo().sourceDir);
            ClassLoader clazzLoader = webViewContext.getClassLoader();

            String className = "com.android.webview.chromium.WebViewChromium";
            mCls = Class.forName(className, true, clazzLoader);
        } catch (android.content.pm.PackageManager.NameNotFoundException ex) {
            Log.e(LOGTAG, "get Webview Class Exception->" + ex);
        } catch (ReflectiveOperationException ex) {
            Log.e(LOGTAG, "get Webview Class Exception->" + ex);
        }
    }

缺点:未验证是否影响 CTSGTS
PS:参考上面第 4 点修改之后,需要 Clean 编译。

相关文章

  • [Mtk][M0] 浏览器保存离线页面失败

    说明: 下面将要说的MtkBrwoser,是指在vender/mediatek目录下的Browser应用。 现象:...

  • 离线应用与客户端存储

    本章内容:进行离线检测、使用离线缓存、在浏览器中保存数据‘ 支持离线 Web 应用开发时 HTML5 的另一个重点...

  • 离线应用与客户端存储(23)

    -进行离线检测-使用离线缓存-在浏览器中保存数据 离线web应用,就是设备在不能上网的情况下仍然可以运行的应用。 ...

  • 离线存储(了解)

    离线存储就是在离线状态也可以访问之前访问过的页面 分析:当有网的情况下,浏览器会访问离线缓存的内容,同时会潜在的向...

  • js阻止页面刷新

    网页中用户的表单填写到一半,或者ajax请求发送期间,如果用户刷新浏览器可能会导致数据保存失败。需要阻止页面刷新,...

  • 使用selenium保存完整网页

    使用selenium保存完整网页 Chrome浏览器在保存网页时可以使用mhtml格式,保存单页面网页,可以直接将...

  • python 自动化截屏

    python 自动化截屏 网站页面功能 浏览器打开html 对浏览器页面进行截图 将截图保存到指定位置 selen...

  • html5的离线存储问题

    HTML5的一个重要特性就是离线存储,所谓的离线存储就是将一些资源文件保存在本地,这样后续的页面重新加载将使用本地...

  • 【编程】kSpider谷歌浏览器爬虫插件

    直接用JavaScript代码批量处理浏览器全部页面,批量向每个页面注入JS脚本甚至JQuery脚本,支持批量保存...

  • 会话跟踪技术-URL重写

    URL重写技术数据保存在浏览器显示的页面中 跳到下一链接 点击链接时,浏览器在跳转页面的同时,还会将?后的参数提交...

网友评论

      本文标题:[Mtk][M0] 浏览器保存离线页面失败

      本文链接:https://www.haomeiwen.com/subject/muckyttx.html