2012-07-31 2 views
0

사용자 상호 작용을 확인하는 메시지가 표시된 웹보기가 있습니다. 해당 메시지는 페이지에서 사용자 상호 작용 이후 사라집니다. 이를 위해 나는 모든 onTouchEvent를 감지하고 메시지가 페이드 아웃되도록 웹 페이지에 호출을 다시 주입합니다.WebView loadURL ("javascript : XYZ")이 내 웹보기에서 여러 번 실행됩니다.

이것은 처음에는 잘 작동하지만 두 번째로 작업하면 (웹 페이지가 다시로드되지 않지만 불투명도를 다시 1로 설정하고 "차단"으로 표시하여 자바 스크립트를 통해 메시지가 다시 표시됨) 메시지가 다시 나타납니다. 그러나 사용자 상호 작용없이 즉시 페이드 아웃합니다. 로그 문에서 나는 onTouchEvent가 트리거되지 않고 자바 스크립트를 삽입하지 않는다는 것을 알 수 있습니다.

loadURL은 웹 페이지에서 몇 가지 탄력적 인 호출을 만들어 내고 어떤 식 으로든 다시 활성화되는 것으로 의심합니다. 이것을 지우는 방법이 있습니까? 한번만 실행하십시오.

내가 이렇게 내 웹보기에 onTouchEvent을 잡을 :이 같은 메시지 요소를 페이드 아웃 자바 스크립트를 실행하기 위해 handleMessage을 무시하고 내 웹뷰에 자바 스크립트를 삽입 부모 활동에서

final class MyWebView extends WebView { 
    ... 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     Log.v(TAG,"onTouchEvent"); 
     if (mUndoActive && (event.getAction() == MotionEvent.ACTION_DOWN)) { 
      mUndoActive = false; 
      mLastAction = LAST_ACTION_NONE; 
      Log.v(TAG,"send hide message"); 
      handler.sendEmptyMessageDelayed(CLICK_ON_WEBVIEW, 300); 
     } 
     return super.onTouchEvent(event); 
    } 
} 

:

@Override 
    public boolean handleMessage(Message msg) { 
     Log.v(TAG,"handleMessage triggered"); 
     if (msg.what == CLICK_ON_WEBVIEW){ 
     Log.v(TAG,"handle message registerd click from stack view web page"); 
     webview.loadUrl("javascript:hideMessage()"); 
     return true; 
     } 
     return false; 
    } 

과 웹보기에서 자바 스크립트는 다음과 같습니다

function hideMessage() { 
    var message = document.getElementById("message"); 
    if (message != null) { 
    if (!message.style.opacity) { 
    message.style.opacity = 1; 
    } 
    var fader = setInterval(function(){ 
     message.style.opacity -= .02; 
     if (message.style.opacity <= 0) { 
     clearInterval(fader); 
     message.style.display = "none"; 
     } 
    }, 25); 
    } 
} 

답변

0

나는 영혼을 직접 발견했다. 즉, 2 Interval calls를 window로 선행했다. ie. window.clearInterval (fader)가 문제를 해결했습니다. 나는 왜 그런지 잘 모르지만 인터벌 타이머가 계속 실행되고 제대로 꺼지지 않은 것처럼 보입니다.

관련 문제