如何在显示的网页视图中注入js代码?

时间:2019-07-15 05:10:26

标签: android webview android-webview

假设我在webview中加载了google页面,然后搜索了

因此页面已更改,该页面中有一个文本,我想使用以下代码在textView中的android应用中获取它

    webview.loadUrl("javascript:api.getSessionID(document.querySelector(bla bla bla)");

class JSInterface {
        @JavascriptInterface

        public void getSessionID(String id) {

            Toast.makeText(context,id, Toast.LENGTH_LONG).show();
        }

我如何在Webview的所示页面中而不是在Google View搜索页面首先加载的页面中注入该js

Google只是一个例子,当用户登录帐户(即第二页)时,我试图将会话ID保存在sharedPreferences中

注意:我的完整代码中包含所有必需的代码,以便注入js并从中获取字符串

注意2:如果我重新加载页面,我将退出

感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

要达到此目的,您可以将javascript评估为

webview.evaluateJavascript("Your JS here which will return session id",
                    html1 -> Log.i("HTML", html1));//session id will be printed

此外,请确保已启用Java脚本以在Webview webView.getSettings().setJavaScriptEnabled(true);

中运行

编辑

第二种方法, 如果您想实现一个将提供回调的接口,请在网页中更改为

if (typeof YourListener != 'undefined')//check if yourlistner is undefined
                yourListener.onTextChange('theReturnValue');
            });

在上面的代码中,从网页调用界面的方式与在android中相同。只需在“ theReturnValue”处应用JS,您就需要从网页中重新调整所需的值。

然后将该界面添加为webview,

webview.addJavascriptInterface(new WebAppInterface(getActivity(), webview), "YourListener");

另外,添加接口为

public class WebAppInterface {

    Context mContext;
    WebView mView;

    /**
     * Instantiate the interface and set the context
     */
    WebAppInterface(Context c, WebView w) {
        mContext = c;
        mView = w;
    }

    /**
     * Show a toast from the web page
     */
    @JavascriptInterface
    public void onTextChange(String html) {
        //you will get the callback text here
    }
}

答案 1 :(得分:0)

首先,您的WebView必须告诉WebView启用JavaScript执行:

webview.getSettings().setJavaScriptEnabled(true);

然后,我们必须设置WebViewClient才能接收onPageFinished事件。

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPag`enter code here`eFinished(view, url);
        webView.loadUrl(
            "javascript:(function() { " +
                "var element = document.getElementById('hplogo');"
                + "element.parentNode.removeChild(element);" +
            "})()");
    }
});