Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在webview中显示的页面中插入js代码?_Android_Webview_Android Webview - Fatal编程技术网

Android 如何在webview中显示的页面中插入js代码?

Android 如何在webview中显示的页面中插入js代码?,android,webview,android-webview,Android,Webview,Android Webview,假设我在webview中加载了google页面,然后我搜索了一些东西 所以页面改变了,在这个页面中有一个文本,我想通过使用下面的代码在我的android应用程序textView中获取它 webview.loadUrl("javascript:api.getSessionID(document.querySelector(bla bla bla)"); class JSInterface { @JavascriptInterface public voi

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

所以页面改变了,在这个页面中有一个文本,我想通过使用下面的代码在我的android应用程序textView中获取它

    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();
        }
如何将这个js注入webview中显示的页面,而不是webview中首先加载的页面,即google搜索页面

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

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

注2:如果我重新加载页面,我将注销


感谢您的帮助

要实现这一点,您可以将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
    }
}
另外,将接口添加为

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
    }
}

您的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);" +
            "})()");
    }
});

如果不起作用,请告诉我。您有权访问html网页进行更改吗?谢谢niks的回答,但我没有得到它,那么,
html1->Log.i(“html”,html1)
该怎么办?我想你不明白我的问题,我知道如何从js注入代码中获取字符串,但我正在寻找在webview中显示的页面中注入js代码,哦,好的,你有权访问HTML网页吗?不,不幸的是,我想这是你可以注入js的方式,HTML只是js的输出。因此,在您的情况下,如果您的JS在浏览器上返回会话ID,那么它将通过运行上述代码返回相同的ID。然后您可以将其设置为文本视图。谢谢您的回答,我的问题中没有完整的代码,我是在问如何放置
webView.loadUrl(“javascript:(function())
要在下一页中注入,我已经在webview、onPageFinished和settings中完成了所有工作…@MJ in
onPageFinished
首先检查它是否是下一页。
onPageFinished
将在webview中的url完全加载时运行,但我要问的是当我进入另一页时,我想从该网页中获取字符串,我该怎么做?@MJ,
进入另一个页面
是什么意思?当你开始加载另一个页面时?第一个页面是登录页面,将在webview中加载URL,在用户登录后,它将重定向到下一个主页,其中有一个会话id,我在chrome控制台中使用js获得它,但是,我不知道如何注入该代码在那个主页上