Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:无法通过在webview中调用js函数来更改图像_Android_Android Viewpager_Android Webview_Android 4.2 Jelly Bean - Fatal编程技术网

Android:无法通过在webview中调用js函数来更改图像

Android:无法通过在webview中调用js函数来更改图像,android,android-viewpager,android-webview,android-4.2-jelly-bean,Android,Android Viewpager,Android Webview,Android 4.2 Jelly Bean,我使用WebView并从资产文件夹WebView.loadUrl(PAGE\uURL)加载html。我使用javascript函数从WebViewClientshouldOverrideUrlLoading方法更改图像 webview.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView

我使用WebView并从资产文件夹
WebView.loadUrl(PAGE\uURL)加载html。我使用javascript函数从
WebViewClient
shouldOverrideUrlLoading
方法更改图像

   webview.setWebViewClient(new WebViewClient(){

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    // eg. url is 'status:0'.
                    System.out.println("This is url:" + url);

                        if(status == 0 || status == 1) {
                            articlejs.setReadStatus(status);
                            String webUrl = "javascript:doStatusSwitch('"+status+"')";
                            articleWebview.loadUrl(webUrl);
                        }
                   }
   }
在javascirpt函数中

function writeReadStatus() {
    var png=new Array("status_read.png","status_unread.png");

    var val= '';
    var index = articlejs.getReadStatus();
    val += '<a href="status:'+ index +'" >';
    val += '<img src="images/'+ png[index] +'" width="10" height="10" />';
    val += '</a>'; 
    document.write(val);
}

    function doStatusSwitch(n) {
        alert('hi hi'+n);
        // Read Status [YES:0,NO:1]
        var png=new Array("status_read.png","status_unread.png");
        var obj=document.getElementById("read").getElementsByTagName("img");
        if(obj){obj[0].src="images/"+png[n];}
        var aObj=document.getElementById("read").getElementsByTagName("a");
        if(aObj){aObj[0].href="status:"+n;}
    }
编辑: 我发现了。我照他们的建议做了,但运气不好


谢谢,我找到了一个解决办法。我在
shouldOverrideUrlLoading
方法中调度touch事件,如下所示

                if(status == 0 || status == 1) {
                   articlejs.setReadStatus(status);
                   String webUrl = "javascript:doStatusSwitch('"+status+"')";
                   articleWebview.loadUrl(webUrl);

                   articleWebview.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 1, 0, 0));
                   articleWebview.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 1, 0, 0));
                }

您是否为
WebSettings set=mmView.getSettings()启用了webview设置的属性;set.setJavaScriptEnabled(true)?是的。我已经补充了。javascript函数可以工作,但我需要单击一次或多次来更改图像状态。
11-25 11:20:46.461: V/WebViewInputDispatcher(737): blockWebkitDraw
11-25 11:20:46.461: V/WebViewInputDispatcher(737): blockWebkitDraw lockedfalse
11-25 11:20:46.766: D/webview(737): blockWebkitViewMessage= false
11-25 11:20:46.781: I/System.out(737): This is url:status:0
11-25 11:20:46.781: D/WebView(737): loadUrlImpl: called
11-25 11:20:46.791: D/WebCore(737): uiOverrideUrlLoading: shouldOverrideUrlLoading() returnstrue
11-25 11:20:46.791: D/webcore(737):  CORE loadUrl: called
11-25 11:20:46.791: D/webkit(737): Firewall not null
11-25 11:20:46.791: D/webkit(737): euler: isUrlBlocked = false
11-25 11:20:46.896: E/IMGSRV(737): :0: GetPTLAFormat: Invalid format
11-25 11:21:16.686: E/IMGSRV(737): :0: GetPTLAFormat: Invalid format
                if(status == 0 || status == 1) {
                   articlejs.setReadStatus(status);
                   String webUrl = "javascript:doStatusSwitch('"+status+"')";
                   articleWebview.loadUrl(webUrl);

                   articleWebview.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 1, 0, 0));
                   articleWebview.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 1, 0, 0));
                }