【问题标题】:Get JavaScript variable in webview in Android在Android的webview中获取JavaScript变量
【发布时间】:2013-12-04 10:06:59
【问题描述】:

我正在使用SCROM APIs 开展一个电子学习项目,但现在我陷入了困境:如何从 scrom API 在 WEBVIEW 中的核心 Android 活动中获取服务器端 JavaScript 值?

我正在尝试以下代码:

 public class MyJavaScriptInterface   
    {  Context mContext;

    /** Instantiate the interface and set the context */
    MyJavaScriptInterface(Context c) {
        mContext = c;
    }


    /** retrieve the ids */
    public void getbookmark(final String bookmarkId) {

        webView.loadUrl("javascript:Android.getbookmark(BOOKMARKED_PAGE);");
        //getWindow().requestFeature();


    }

        @SuppressWarnings("unused")  
        public void showHTML(String html)  
        {  
           new AlertDialog.Builder(myApp)  
                .setTitle("HTML")  
                .setMessage(html)  
                .setPositiveButton(android.R.string.ok, null)  
            .setCancelable(false)  
            .create()  
            .show(); 
        }  
    }  

我必须取WebViewonpagefinished()函数的值吗?

【问题讨论】:

    标签: android webview scorm scorm2004


    【解决方案1】:

    您需要添加一个 javascript 界面:

    mWebView.addJavascriptInterface(new MyJavaScriptInterface(getApplicationContent(), "JSInterface");
    

    在您要调用的接口中添加一个方法,并确保您有 @JavascriptInterface 注释,以便 Android 使其可调用:

    @JavascriptInterface
    public void showHTML(String html)  
    {  
       new AlertDialog.Builder(myApp)  
            .setTitle("HTML")  
            .setMessage(html)  
            .setPositiveButton(android.R.string.ok, null)  
        .setCancelable(false)  
        .create()  
        .show(); 
    } 
    

    然后按照你在javascript中调用方法时的做法:

    webView.loadUrl("javascript:Android.getbookmark(BOOKMARKED_PAGE);");
    

    javascript 方法看起来像:

    window.Android.getbookmark = function(variable) {
        var returnValue = getSomeValue(variable);
    
        if(!window.JSInterface) {
            console.error('window.JSInterface not defined - Did you inject the javascript interface in the native app?');
        }
    
        window.JSInterface.showHTML(returnValue);
    };
    

    请注意我们有 window.JSInterface 的原因是因为我们在以下位置添加了该名称:

    mWebView.addJavascriptInterface(new MyJavaScriptInterface(getApplicationContent(), "JSInterface");
    

    注意:在 KitKat 中使用evaluateJavascript() 比 loadUrl 更高效,最简单的形式如下所示,允许您传入回调以获取返回值(示例代码中的 Demo)

    webView.evaluateJavascript("Android.getbookmark(BOOKMARKED_PAGE);", null);
    

    这里有一个完整的 JS 接口示例,其中包括 KitKat 中的新 API:https://github.com/GoogleChrome/chromium-webview-samples

    【讨论】:

      【解决方案2】:

      您可以使用 javascript 桥 来满足您的要求 you can find the source , this too

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-03
        • 2018-01-17
        • 2015-08-23
        • 2014-05-31
        • 2013-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多