0

WebView를 사용하고 자산 폴더 webview.loadUrl(PAGE_URL);에서 HTML을로드했습니다. 나는 WebViewClientshouldOverrideUrlLoading 메서드에서 이미지를 변경하는 자바 스크립트 함수가 있습니다. javascirpt 기능에서 Android : webview에서 js 함수를 호출하여 이미지를 변경할 수 없습니다.

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

, HTML 파일

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;} 
    } 

,

<div id="head"> 
     <h1><script type="text/javascript">writeTitleText(); writeStyle();</script></h1> 
     <ul id="status"> 
      <li id="read"><script type="text/javascript">writeReadStatus();</script></a></li> 
     </ul> 
    </div> 

나는 이미지를 클릭하면 JS 기능은 이미지를 변경해야합니다. 내 문제는 한 번 클릭하면 변경되지 않으며 두 번 클릭하여 이미지를 변경해야한다는 것입니다. 왜 그런 일이 일어 났는지 나는 모른다.

나는 이미지를 클릭

는 로그 캣은

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 

편집을 보여 나는 link 있음을 발견했다. 나는 그들이 제안했지만 행운은 없었습니다.

감사합니다.

+0

'WebSettings set = mmView.getSettings();에 대한 webview 설정의 속성을 활성화 했습니까? \t \t set.setJavaScriptEnabled (true); '? – GrIsHu

+0

예. 나는 이미 추가했다. javascript 함수는 작동하지만 이미지 상태를 변경하려면 하나 이상의 시간을 클릭해야합니다. – user1156041

답변

0

해결책을 찾았습니다. 이렇게 shouldOverrideUrlLoading 방법으로 터치 이벤트를 파견합니다.

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