【问题标题】:Using Android Browser - Detecting page change使用 Android 浏览器 - 检测页面更改
【发布时间】:2012-04-15 02:21:46
【问题描述】:

我有一个应用程序可以打开浏览器到用户给定的 url。这应该指向某个没有身份验证的登录页面。是否可以检测到用户何时单击登录以转到我以后可以解析为 HTML 源的成员页面?我只是在寻找某种页面更改检测。

编辑:我现在正在使用 WebView。到目前为止,这是新的 WebView 活动类的一部分:

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("theurl(removed)"); // Removed url for StackOverflow
    mWebView.loadUrl("javascript:document.getElementById('sid').value = 'name';"); // Supposed to autofill a particular input with id 'sid'

尝试首先更改页面上输入的值,但无济于事。

【问题讨论】:

    标签: android browser


    【解决方案1】:

    是否可以检测到用户何时单击登录以转到我稍后可以解析为 HTML 源的成员页面?

    不使用独立浏览器。那将是一场安全和隐私的噩梦。

    欢迎您将 WebView 小部件嵌入到您的应用中,让用户通过它登录,然后使用 JavaScript 从任何生成的页面中获取数据。

    【讨论】:

    • 我添加了我的 webview 详细信息。请看一下编辑!你能先告诉我我在输入方面做错了什么吗?
    • @MarkLyons:您调用第二个loadUrl() 太快了,因为第一个loadUrl() 肯定还没有完成。 loadUrl() 是异步的。
    • 所以我应该使用某种功能等到页面完全加载?
    • @MarkLyons:您可以将WebViewClient 附加到WebView 并覆盖其上的方法以了解页面事件。 onPageFinished() 理论上是你想要的,但我的结果好坏参半,但它当然值得一试。
    【解决方案2】:

    首先,您应该在应用中打开 url,只需使用带有自定义 WebViewClient 的 WebView:

    WebView myWebView = (WebView) findViewById(R.id.mywebview);
    CustomWebViewClient webViewClient = new CustomWebViewClient();
    myWebView.setWebViewClient(webViewClient);
    

    你用它打开你的网址:

    myWebView.loadUrl("http://myurl.com");
    
    
      private class CustomWebViewClient extends WebViewClient { 
    
        @Override
        /**
         * I assume the url changes when the user clicks login, so parse the url and do the right stuff
         * I look for a fictitious sessionkey here
         */
        public void onLoadResource(WebView view, String url) {
            try {
                String sessionKey = URLDecoder.decode(view.getUrl().split("session_key=")[1], "UTF-8");
                if ( sessionKey == 1337)
                    {
                    ...
                    }                           
                }
            catch (Exception e) {
                e.printStackTrace();
            }
            super.onLoadResource(view, url);
        }
    
        @Override
        /**
         * Take control over the loaded url so the url is open in the current Webview and not with the default browser of Android
         */
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    }
    

    【讨论】:

    • 在得到答案之前我已经开始使用 webview 了。我认为做我现在发现的可能会更有效:我可以在 webview 中加载 url,然后根据之前在 app.xml 中提供的信息更改输入。我还读到可以为他们自动“单击”登录按钮。在新页面加载完成后(登录按钮点击后)获取html源代码会更有效吗?
    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2015-09-18
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多