假设我在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:如果我重新加载页面,我将退出
感谢任何帮助!
答案 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);" +
"})()");
}
});