首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓WebView和Word Online

安卓WebView和Word Online
EN

Stack Overflow用户
提问于 2019-03-19 07:43:25
回答 4查看 1.4K关注 0票数 8

我正在处理一个Android项目,在这个项目中,我必须打开一个Word Online文档,该文档必须在不暴露URL的情况下打开。我有以下打开文档的代码,但是发生了一些错误。我很确定这与权限有关,但我不确定我到底遗漏了什么。

代码语言:javascript
复制
FrameLayout.LayoutParams rl = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
                android.webkit.WebView wView = new android.webkit.WebView(this.getContext());
                wView.setId(0x100);
                //wView.setWebChromeClient(new WebChromeClient());
                wView.setWebViewClient(new WebViewClient());
                wView.getSettings().setJavaScriptEnabled(true);
                wView.getSettings().setAllowFileAccess(true);
                wView.getSettings().setAllowUniversalAccessFromFileURLs(true);
                wView.getSettings().setAllowContentAccess(true);
                wView.getSettings().setAppCacheEnabled(true);
                wView.getSettings().setAppCachePath(getContext().getCacheDir().getPath());

                wView.setScrollContainer(false);
                wView.setLayoutParams(rl);
                wView.loadUrl(docURL);

这是显示视图时的日志

代码语言:javascript
复制
I/WebViewFactory: Loading com.android.chrome version 72.0.3626.121 (code 362612102)
I/cr_LibraryLoader: Time to load native libraries: 17 ms (timestamps 4146-4163)
I/chromium: [INFO:library_loader_hooks.cc(42)] Chromium logging enabled: level = 0, default verbosity = 0
I/cr_LibraryLoader: Expected native library version number "72.0.3626.121", actual native library version number "72.0.3626.121"
W/cr_ChildProcLH: Create a new ChildConnectionAllocator with package name = com.android.chrome, sandboxed = true
I/cr_BrowserStartup: Initializing chromium process, singleProcess=false
W/ResourceType: Failure getting entry for 0x7f120538 (t=17 e=1336) (error -2147483647)
W/nicle.chronicle: type=1400 audit(0.0:15466): avc: denied { read } for name="vmstat" dev="proc" ino=4026532345 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:proc:s0 tclass=file permissive=0
W/Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:612>: EGL_BAD_ATTRIBUTE
W/Chrome_InProcGp: type=1400 audit(0.0:15467): avc: denied { search } for name="kgsl-3d0" dev="sysfs" ino=19452 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:sysfs_kgsl:s0 tclass=dir permissive=0
W/Adreno-ES20: <get_gpu_clk:229>: open failed: errno 13
W/Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:612>: EGL_BAD_ATTRIBUTE
I/Choreographer: Skipped 46 frames!  The application may be doing too much work on its main thread.
W/cr_CrashFileManager: /data/user/0/com.gochronicle.chronicle/cache/WebView/Crash Reports does not exist or is not a directory
W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
Unrecognized profile 2130706434 for video/avc
W/VideoCapabilities: Unsupported mime video/divx
W/VideoCapabilities: Unsupported mime video/divx4
W/VideoCapabilities: Unrecognized profile 2130706433 for video/avc
Unrecognized profile 2130706434 for video/avc
I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
W/Adreno-ES20: <get_gpu_clk:229>: open failed: errno 13
W/Chrome_InProcGp: type=1400 audit(0.0:15468): avc: denied { search } for name="kgsl-3d0" dev="sysfs" ino=19452 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:sysfs_kgsl:s0 tclass=dir permissive=0
 I/zygote: Do partial code cache collection, code=1006KB, data=690KB
I/zygote: After code cache collection, code=1006KB, data=690KB
Increasing code cache capacity to 3MB
I/chromium: [INFO:CONSOLE(1)] "Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.", source: https://c1-word-view-15.cdn.office.net/wv/s/161151337776_App_Scripts/WordViewer.js (1)
I/chromium: [INFO:CONSOLE(0)] "The resource https://c1-word-edit-15.cdn.office.net/we/s/161151337776_App_Scripts/jSanity.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.", source:  (0)
I/chromium: [INFO:CONSOLE(0)] "The resource https://c1-word-edit-15.cdn.office.net/we/s/161151337776_App_Scripts/Compat.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.", source:  (0)
I/chromium: [INFO:CONSOLE(0)] "The resource https://c1-officeapps-15.cdn.office.net/we/s/161151337776_App_Scripts/MicrosoftAjax.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.", source:  (0)
[INFO:CONSOLE(0)] "The resource https://c1-word-edit-15.cdn.office.net/we/s/161151337776_App_Scripts/WordEditor.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.", source:  (0)
[INFO:CONSOLE(0)] "The resource https://c1-word-edit-15.cdn.office.net/we/s/161151337776_App_Scripts/wacbootwe.js was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.", source:  (0)

尽管我已经检查了所有的webview设置并赋予了非常广泛的权限,但这似乎是错误所在

代码语言:javascript
复制
D/libc-netbsd: getaddrinfo: word-edit.officeapps.live.com get result from proxy gai_error = 0
D/OpenSSLLib: OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object
D/OpenSSLLib: OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object
D/OpenSSLLib: OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object
OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object
D/libc-netbsd: [getaddrinfo]: hostname=word-view.officeapps.live.com; servname=(null); netid=0; mark=0
[getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=1024; ai_family=0
D/libc-netbsd: getaddrinfo: word-view.officeapps.live.com get result from proxy gai_error = 0
D/libc-netbsd: [getaddrinfo]: hostname=c1-officeapps-15.cdn.office.net; servname=(null); netid=0; mark=0
[getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=1024; ai_family=0
D/libc-netbsd: [getaddrinfo]: hostname=c1-word-view-15.cdn.office.net; servname=(null); netid=0; mark=0
[getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=1024; ai_family=0
D/libc-netbsd: getaddrinfo: c1-word-view-15.cdn.office.net get result from proxy gai_error = 0
D/libc-netbsd: getaddrinfo: c1-officeapps-15.cdn.office.net get result from proxy gai_error = 0
D/OpenSSLLib: OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object
OpensslErr:Module:12(116:176); file:external/boringssl/src/crypto/asn1/asn1_lib.c ;Line:186;Function:ASN1_get_object

EN

回答 4

Stack Overflow用户

发布于 2019-03-25 22:11:07

你可以通过另一种方式使用WebView和谷歌文档实现这一点,如下所示。

代码语言:javascript
复制
String url = "http://docs.google.com/gview?embedded=true&url="+YOUR_DOC_URL;

private void loadWebViewAndDocUrl()
{
    String googleDocViewer = "<iframe src=\""+url+"\" style=\"width:100%; height:100%;\" frameborder=\"0\" allowtransparency=\"true\"></iframe>";
    progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    final WebView wvExternalLink = (WebView) view.findViewById(R.id.wvExternalLink);
    wvExternalLink.getSettings().setJavaScriptEnabled(true);

    wvExternalLink.loadData(googleDocViewer, "text/html", "utf-8");

    wvExternalLink.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            wvExternalLink.loadUrl(url);
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            // Show progress till url loads completely using progressbar
        }
    });


}
票数 0
EN

Stack Overflow用户

发布于 2019-03-25 22:42:26

你可以试一试

代码语言:javascript
复制
WebView urlWebView = (WebView)findViewById(R.id.containWebView);
urlWebView.setWebViewClient(new AppWebViewClients());
urlWebView.getSettings().setJavaScriptEnabled(true);
urlWebView.getSettings().setUseWideViewPort(true);
urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="
                + "YOUR_DOC_URL_HERE"); 

public class AppWebViewClients extends WebViewClient {



    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-29 07:02:52

你应该试着在平板电脑的浏览器上打开docURL,最好是Chrome浏览器。

你的代码适用于三星Galaxy J7 Pro,Android8.1和Moto G4,Android7.0上的this文档。两个物理设备。而且它没有显示URL。

它还可以在模拟安卓Nexus 5 API 23上工作,也就是安卓6.0。

您需要的唯一权限是:

<uses-permission android:name="android.permission.INTERNET" />

确保您的平板电脑上的Android WebView是最新的。

这也可能是DNS设置、文档内容或文档域的问题。我为我的测试创建了指向文件、->、共享、->、插入博客或站点的链接,并将内容作为生成的iframe的src属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55231680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档