3

IphoneのようなAndroidにstringByEvaluatingJavaScriptFromStringメソッドが存在しますか?このjavascript:wave()のような単純なコードではありません。しかし、複雑なJavaスクリプト関数を使用します。ありがとう

4

2 に答える 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 に答える