WebView addJavascriptInterface - 如何使用?

时间:2011-03-31 20:07:44

标签: java android javascript-events webview

我正在尝试在我的Android活动中通过我的标题栏上的ImageButton启动驻留在我的webView中的HTML文档中的java函数(让我抓住mt breath - LOL)。我遵循了帮助文档,但我没有得到它。

有人可以更正我的剧本,这将是一个很大的帮助,更多的是要学习。日Thnx !!

HTML doc(mWebView)中的函数:

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

...和.main活动中的代码(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()");
                    }
                });
                }
            });
        }
     }
 }

2 个答案:

答案 0 :(得分:0)

$.mobile.changePage("docs/ToC.html", "slideup");

假设这会修改window.location.href或类似内容,似乎这可能不会触发shouldOverrideUrlLoading()。有关详情,请参阅window.location.href javascript does not trigger shouldOverrideUrlLoading,包括我建议的解决方法。

答案 1 :(得分:0)

这有点晚了,但请注意myJavaScriptInterface()永远不会被调用,因此按钮的OnClickListener永远不会被设置,因此该按钮不会执行任何操作。

javascript界面​​用于从javascript到您的应用程序的通信;它的方法仅在您在javascript中显式调用它们时调用。要拨打myJavaScriptInterface(),您需要在javascript中放置一些地方:jsi.myJavaScriptInterface();。大概你会把它放在你想要设置按钮处理程序的地方,就像在$(document).ready()中一样。就个人而言,我只是在主代码中设置处理程序,没有接口,但你的方式也可能有效。