Android 如何在webview中显示的页面中插入js代码?
假设我在webview中加载了google页面,然后我搜索了一些东西 所以页面改变了,在这个页面中有一个文本,我想通过使用下面的代码在我的android应用程序textView中获取它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.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脚本在webviewwebview.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 inonPageFinished
首先检查它是否是下一页。onPageFinished
将在webview中的url完全加载时运行,但我要问的是当我进入另一页时,我想从该网页中获取字符串,我该怎么做?@MJ,进入另一个页面
是什么意思?当你开始加载另一个页面时?第一个页面是登录页面,将在webview中加载URL,在用户登录后,它将重定向到下一个主页,其中有一个会话id,我在chrome控制台中使用js获得它,但是,我不知道如何注入该代码在那个主页上