2011-06-23 12 views
3

存在しますか?AndroidのようなAndroidのstringByEvaluatingJavaScriptFromStringメソッドは、Iphoneですか? javascriptのような単純なコードではありません:wave()。しかし、複雑なJava Script関数を使用します。あなたが代わりに使用することができますloadUrl おかげAndroid用のstringByEvaluatingJavaScriptFromStringが存在します。

+0

http://stackoverflow.com/questions/10304680/stringbyevaluatingjavascriptfromstring-ios-method-をこれは、アンドロイドに相当するものです – Zeb

答えて

0

、例えば:

webView.loadUrl("javascript:PerformSimpleCalculation()"); 

それはstringByEvaluatingJavaScriptFromString【選択のAPIの説明と同様の効果が明確でないです。

0

stringByEvaluatingJavaScriptFromStringは、Android APIのプライベートメソッドです。しかし、それは本当に便利です。

あなたはJavaのリフレクションを経由して、このAPIをretriveできます

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(); 
    } 
+0

このようにして例外が発生します:フィールドwc = webViewClass.getDeclaredField( "mWebViewCore"); –

関連する問題