2012-09-19 2 views
2

WebView 내부에서 사용하려는 기존의 웹 기반 등록 프로세스가있는 응용 프로그램이 있습니다. 내 애플 리케이션 내부 콘텐츠를 표시하기 위해 일부 요소를 숨기려면 html에 스타일 태그를 추가해야합니다. 초기로드에서 작동하도록 할 수는 있지만 WebView 내부에서 한 페이지에서 다른 페이지로 이동하는 방법을 알아낼 수 없습니다. 여기에 내가 작업이 무엇 : 이것은 완벽하게 작동URL을로드하기 전에 WebView에 컨텐츠를 삽입하십시오.

wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url); 

를 호출하기 전에

사이트의 초기로드에

, 나는 원시 HTML을 얻고 "<style>MY STYLES HERE</스타일을 추가하고> "문자열을하지만 경우 사용자가 페이지의 링크를 클릭하고 WebView에 다른 페이지를로드하면이 코드가 호출되지 않고 스타일 태그가 손실됩니다.

WebViewClient에서 "shouldOverrideUrlLoading"을 재정의해야한다고 가정합니다. 여기에서 html을 가로채는 방법을 알지 못한다. 나는 다음과 같은 것을 시도 할 것이라고 생각했다 :

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    String rawHtml = getRawHtml(url) + "<style>...</style>"; 
    wv.loadDataWithBaseURL(url, rawHtml, null, "UTF-8", url); 
} 

그러나 이것은 명백하게 새로운로드를 시작하기 위해로드를 인터셉트하는 무한 루프로 보냅니다.

나는 또한 onPageFinished 무시하고 일을 시도 :

전체 페이지가 실행하기 전에로드 될 때까지 기다리는 것을 제외하고, 작동
wv.loadUrl("javascript:(function() { ... })()"); 

. 이렇게하면 페이지에 모든 UI 요소가 표시되어 나타납니다. 그러면 숨기려고하는 모든 요소가 갑자기 사라집니다. 궁극적 인 목표는 모바일 장치에서 사이트의 모양과 느낌을 향상시키는 것이므로 선택 사항이 아닙니다.

"shouldOverrideUrlLoading"에서 스타일 태그를 삽입 할 수있는 다른 방법이 있습니까? 아니면 그렇지 않으면 내가 뭘하려고 할 수 있습니까?

답변

0

나는이 문제를 겪었으며 리디렉션 횟수에 따라 항상 삽입 된 JavaScript를 사용할 수 없었습니다.

최소한 wv.loadUrl("javascript:(function() { ... })()"); 접근 방식을 사용해야하지만 onPageStarted() 및 onPageFinished()에서 호출해야합니다.

페이지의 복잡도에 따라 JavaScript를 onLoadResource()에 삽입해야 할 수도 있습니다.

+1

나는 onLoadResource를 시도해 보았지만 제대로 작동하는 것처럼 보였지만, 원하는 페이지의 내용을 절반 정도 닦아 버렸다. 내 코드는 wv.loadUrl ("javascript : function() {document.getElementsByTagName ('body') [0] .innerHTML + = '';}()"); 왜 이렇게 할거 아십니까? – Dave

관련 문제