IphoneのようなAndroidにstringByEvaluatingJavaScriptFromStringメソッドが存在しますか?このjavascript:wave()のような単純なコードではありません。しかし、複雑なJavaスクリプト関数を使用します。ありがとう
3608 次
2 に答える
0
代わりに使用できますloadUrl
。例:
webView.loadUrl("javascript:PerformSimpleCalculation()");
効果は同様stringByEvaluatingJavaScriptFromString
です。APIの説明は明確ではありません。
于 2012-01-06T09:55:03.477 に答える
0
stringByEvaluatingJavaScriptFromStringは、AndroidAPIのプライベートメソッドです。しかし、それは本当に便利です。
Javaリフレクションを介してこのAPIを取得できます。
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();
}
于 2013-07-24T09:43:54.227 に答える