使用登录(身份验证)访问远程pdf文件

时间:2018-03-08 04:47:50

标签: android webview moodle

我在loading URL web-view遇到问题。 Web-view显示为空白,因为它未登录。如何在未使用course file登录moodle2.6的情况下访问url

使用此网址格式

http://example.com/pluginfile.php/4418/mod_resource/content/10/xx-t2.pdf

这是我的网络视图代码

webView.setWebViewClient(new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //progDailog.show();
            view.loadUrl(url);

            return true;
        }
        @Override
        public void onPageFinished(WebView view, final String url) {
            //progDailog.dismiss();
        }
    });

    webView.loadUrl("http://example.com/pluginfile.php/4418/mod_resource/content/10/xx-t2.pdf");

2 个答案:

答案 0 :(得分:1)

您需要将pdf网址附加到Google文档查看器以在网络视图中打开pdf,此外,您需要为JavaScript启用webview

public class MainActivity extends AppCompatActivity {
    WebView webview;
    String pageURL = "https://developer.android.com/guide/webapps/webview.html";
    String pdf = "http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"; //your pdf address

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webview = findViewById(R.id.webview);

        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);

        webview.getSettings().setJavaScriptEnabled(true); // enable javascript

        webview.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //progDailog.show();
                view.loadUrl(url);

                return true;
            }

            @Override
            public void onPageFinished(WebView view, final String url) {
                //progDailog.dismiss();
            }
        });

        //webview.loadUrl(pageURL);
        webview.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf); //simply append pdf address to doc viewer
    }
}
  

在webview中打开示例PDF

答案 1 :(得分:0)

似乎你的webclient没有调用他们的超级方法,这可能是页面无法加载的一个原因,使用以下代码加载登录页面,一旦登录用户就可以查看预期的pdf文件。

 webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);//<-- this is important when overriding
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);//<-- this is important when overriding

        }
    });

    webView.loadUrl("https://lms.jsbl.com//pluginfile.php//4925//mod_resource//content//0//calendar_cal_605.pdf");

此外,如果您希望使用网页浏览查看pdf,则需要在网址前附加以下内容,以便谷歌插件可用于加载PDF     https://docs.google.com/gview?embedded=true&url=

(为此,请确保您已将以下内容添加到您的网页浏览中  webView.getSettings().setJavaScriptEnabled(true);webView.getSettings().setPluginState(PluginState.ON);

根据this question某些登录表单提交可能无法在Android webview上运行,因此在您的webview上设置all / some(检查您的登录是否在没有它的情况下工作)以使登录工作

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setDatabaseEnabled(true);
mWebView.getSettings().setDatabasePath(dbpath); //check the documentation for info about dbpath
mWebView.getSettings().setMinimumFontSize(1);
mWebView.getSettings().setMinimumLogicalFontSize(1);

但是,如果你知道登录的凭据你可以follow the instruction on this网站向webview注入一个javascript,这将触发webview上的登录表单提交并直接重定向到pdf文件

更新16/3/2018

使用以下代码在重定向期间附加google pdf小部件 并有一个pdf扩展名

boolean isInititialRedirectComplete = false;
boolean isPdfRedirectComplete  = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    f-inal WebView webView = (WebView) findViewById(R.id.testWebView);
    webView.getSettings().setJavaScriptEnabled(true);webView.getSettings().setPluginState(WebSettings.PluginState.ON);

    webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, final String url) {
            super.onPageFinished(view, url);
                           if (url.substring(url.lastIndexOf(".")).equalsIgnoreCase(".pdf") && !isPdfRedirectComplete && isInititialRedirectComplete ){
                isPdfRedirectComplete = true;
                webView.loadUrl("https://docs.google.com/gview?embedded=true&url=" + url);
            }
            isInititialRedirectComplete = true;
        }
    });
    webView.loadUrl(
            "https://lms.jsbl.com//pluginfile.php//4925//mod_resource//content//0//calendar_cal_605.pdf");

}