WebView addJavascriptInterface - Как использовать? - PullRequest
0 голосов
/ 01 апреля 2011

Я пытаюсь запустить функцию Java, находящуюся в документе HTML, который загружается в мой веб-вид через кнопку ImageButton в строке заголовка с моей активностью на Android (позвольте мне перевести дыхание - LOL).Я следовал за справочной документацией, но я не получаю ее.

Может кто-нибудь, пожалуйста, исправит мой сценарий, это было бы большой помощью и многому научиться.Thnx !!

Функция в HTML-документе (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 голосов
/ 02 октября 2013

Это немного поздно, но учтите, что myJavaScriptInterface() никогда не вызывается, поэтому OnClickListener кнопки никогда не устанавливается, поэтому кнопка ничего не будет делать.

Интерфейс javascript предназначен для связи из javascript в вашем приложении; его методы вызываются только там, где вы явно вызываете их в своем javascript. Чтобы позвонить myJavaScriptInterface(), вы должны указать где-нибудь в своем javascript: jsi.myJavaScriptInterface();. Предположительно, вы бы поместили его в такое место, где вы бы хотели, чтобы был установлен обработчик кнопки, как, например, в $(document).ready(). Лично я бы просто установил обработчик в основном коде без интерфейса, но ваш путь, вероятно, тоже работает.

0 голосов
/ 01 апреля 2011
$.mobile.changePage("docs/ToC.html", "slideup");

Предполагая, что это изменяет window.location.href или что-то подобное, может показаться, что, возможно, это не вызывает shouldOverrideUrlLoading().См. window.location.href javascript, который не вызывает shouldOverrideUrlLoading , для получения дополнительной информации, включая мой предложенный обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...