【问题标题】:WebView addJavascriptInterface - How to use?WebView addJavascriptInterface - 如何使用?
【发布时间】:2011-03-31 20:07:43
【问题描述】:

我正在尝试触发驻留在 HTML 文档中的 Java 函数,该 HTML 文档通过我的 Android 活动中标题栏上的 ImageButton 加载到我的 webView 中。我遵循了帮助文档,但没有得到它。

有人可以更正我的脚本吗?这将是一个很大的帮助和更多的学习。

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

【问题讨论】:

    标签: javascript java android android-webview dom-events


    【解决方案1】:
    $.mobile.changePage("docs/ToC.html", "slideup");
    

    假设这修改了window.location.href 或类似的东西,看起来这可能不会触发shouldOverrideUrlLoading()。请参阅window.location.href javascript does not trigger shouldOverrideUrlLoading 了解更多信息,包括我建议的解决方法。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-06-13
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        • 2011-01-16
        相关资源
        最近更新 更多