2011-03-31 9 views
0

我試圖通過我的標題欄w /在我的Android活動(讓我趕上山呼吸 - 大聲笑)通過ImageButton加載在我的webView中的HTML文檔中駐留的Java函數。我遵循幫助文檔,但我沒有得到它。WebView addJavascriptInterface - 如何使用?

有人可以糾正我的腳本,這將是一個很大的幫助和更多的學習。日Thnx!

在HTML文檔(mWebView)功能:

<script type="text/javascript"> 
    $(document).ready(function() { 
     function ToC(){ 
      $.mobile.changePage("docs/ToC.html", "slideup"); 
     }; 
    }); 
</script> 

...在我的。主要活動代碼(main.java):

public class main extends Activity { 

    WebView mWebView; 
    private Handler mHandler = new Handler(); 

// -- Called when the activity is first created. --/ 
    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     setContentView(R.layout.main); 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title); 
      if (savedInstanceState != null) 
        ((WebView)findViewById(R.id.webView1)).restoreState(savedInstanceState); 

// -- Set up the WebView --> 
     mWebView = (WebView) findViewById(R.id.webView1); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.addJavascriptInterface(new myJavaScriptInterface(), "jsi"); 
     mWebView.setWebViewClient(new myWebViewClient()); 
     mWebView.loadUrl("file:///android_asset/www/index.html"); 

    final class myJavaScriptInterface { 

     myJavaScriptInterface() { 

     ImageButton imageButton = (ImageButton) findViewById(R.id.bookBtn); 
     imageButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mHandler.post(new Runnable() { 
        public void run() { 
        mWebView.loadUrl("javascript:ToC()"); 
        } 
       }); 
       } 
      }); 
     } 
    } 
} 

回答

0

這有點遲,但請注意myJavaScriptInterface()永遠不會被調用,所以按鈕的OnClickListener從不設置,所以按鈕將不會執行任何操作。

JavaScript接口是用於從JavaScript到您的應用程序的通信;它的方法只在你明確地在你的javascript中調用它們的地方調用。要撥打myJavaScriptInterface(),您需要在javascript:jsi.myJavaScriptInterface();的某個位置放置。想必你會把它放在你想要設置按鈕的處理程序的地方,比如在$(document).ready()。就我個人而言,我只是在主代碼中設置處理程序,而不使用接口,但您的方式可能也適用。

相關問題