Exist stringByEvaluatingJavaScriptFromString для Android
Суть метода stringByEvaluatingJavaScriptFromString в Android, например, Iphone ?. Не с простым кодом, как этот javascript: wave (). Но со сложной функцией Java Script. благодаря
loadUrl
этого вы можете использовать loadUrl
, например:
webView.loadUrl("javascript:PerformSimpleCalculation()");
Это похоже на stringByEvaluatingJavaScriptFromString
. Описание API stringByEvaluatingJavaScriptFromString
.
StringByEvaluatingJavaScriptFromString – частный метод в Android API. Но это действительно полезно.
Вы можете получить этот API через отражение Java:
Method stringByEvaluatingJavaScriptFromString , sendMessageMethod;; Object webViewCore , browserFrame; private boolean hasIntercepted = true; Object webViewObject = this; Class webViewClass = WebView.class; try { Field mp = webViewClass.getDeclaredField("mProvider"); mp.setAccessible(true); webViewObject = mp.get(this); webViewClass = webViewObject.getClass(); Field wc = webViewClass.getDeclaredField("mWebViewCore"); wc.setAccessible(true); webViewCore = wc.get(webViewObject); if (webViewCore != null) { sendMessageMethod = webViewCore.getClass().getDeclaredMethod("sendMessage", Message.class); sendMessageMethod.setAccessible(true); Field bf= webViewCore.getClass().getDeclaredField("mBrowserFrame"); bf.setAccessible(true); browserFrame = bf.get(webViewCore); stringByEvaluatingJavaScriptFromString = browserFrame.getClass().getDeclaredMethod("stringByEvaluatingJavaScriptFromString", String.class); stringByEvaluatingJavaScriptFromString.setAccessible(true); } hasIntercepted = true; } catch (Throwable e) { hasIntercepted = false; }
Затем, чтобы использовать этот метод:
Object argument =(Object) ((String)"window.hitTest("+event.getX()+ ","+event.getY()+")"); try { Object _tagName = stringByEvaluatingJavaScriptFromString.invoke(browserFrame, argument); String tagName =(String)_tagName; } catch (Exception e) { e.printStackTrace(); }