2014-05-25 1 views
3

웹 페이지를로드하기 위해 webview를 호스팅하는 Android 애플리케이션을 작성하고 있습니다. 나는 로그 캣에서 아래와 같은 오류를 많이 얻었다 "기본-SRC '자기'" Android webview에서 인라인 스크립트 실행을 거부했습니다.

는 다음 콘텐츠 보안 정책 지침을 위반 인라인 스크립트를 실행하지 않았다. 'script-src'가 명시 적으로 설정되지 않았으므로 'default-src'는 폴백으로 사용됩니다.

자바 스크립트는 인라인 스크립트가 아닌 경우 잘 실행됩니다. 다음과 같은 HTML 파일로 예를 들어 :

<htnl> 
<head> 
<script type="text/javascript" src="abc.js"></script> 
</head> 
<body> 
<script type="text/javascript"> 
    alert("This is inline script"); 
</script> 
</body> 
</html> 

스크립트 abc.js에서 제대로 실행되지만, 인라인 스크립트를 실행하기를 거부한다.

"Contect 보안 정책"으로 인해 webview에서 인라인 자바 스크립트를 실행하는 것을 거부합니다. 그러나 웹 페이지는 제대로 작동하려면 인라인 스크립트를 실행해야하며 웹 페이지를 변경할 수는 없습니다.

이 문제에만 킷캣 (안드로이드 4.4)

인라인 스크립트가 실행 될 수 있도록 "콘텐츠 보안 정책을"이 문제를 극복 수정할 수있는 방법이 있나요.

+0

[Android : setJavaScriptEnabled (true)를 사용하여 WebView에서 자바 스크립트를 사용할 수 없음 (http://stackoverflow.com/questions/5110916/android-cant-get-javascript-to-work- on-web-view-even-with-setjavascriptenabled) – Dalorzo

+1

@Dalorzo : 참조 주셔서 감사합니다. 이미 질문을 보았지만 문제는 다릅니다. 내 문제는 콘텐츠 보안 정책과 관련, Javascript가 인라인 자바 스크립트가 아니라면 잘 실행되었습니다. –

+0

이봐,이 문제에 대한 해결책을 찾았 니? 나는 똑같은 것을 직면하고있다. – EladB

답변

1

WebView 개발자의 정보에 따르면 주입 된 자바 스크립트는 Chromium 확장을 사용하는 경우와 같이 격리 된 세계가 아닌 호스트 페이지 자체에서 실행됩니다. 이러한 이유로 Content Security Policy 헤더 (존재하는 경우)에 의해 부과 된 공통 보안 검사를 통과해야합니다. 따라서 src 속성이나 인라인 또는 두 가지 방법으로 헤더 지시문에 따라 스크립트를 파일로 삽입 할 수 없습니다 (예 : unsafe-inline이 언급 된 경우 스크립트 태그를 삽입 할 수 없습니다. 인라인 코드 포함).

해결 방법은 loadUrl 또는 evaluateJavascript 메서드를 사용하여 스크립트 태그를 추가하지 않고 javascript 코드를 "있는 그대로"실행하는 것입니다. 예 :

webview.loadUrl("javascript:alert('hello')"); 

이 성공적으로 실행됩니다.

Android 4.4 이상에서는 새로운 evaluateJavascript 방법을 사용하는 것이 좋습니다. loadUrl은 앱이 새로운 Android 버전 중 하나를 타겟팅 할 때 부작용이 있기 때문입니다 (요즘 대부분의 프로젝트에서 그렇습니다). 스크립트가 값을 반환하면 현재 페이지의 DOM 내용을 대체합니다. 4.4보다 전의 타겟에서는, 옵션의 콜백을 개입시켜 값을 돌려 줄 가능성을 제외하면, 두 방법 모두 동일하다. evaluateJavascript.

다른 트릭을 생각할 수도 있지만 문제를 해결하기에 충분해야합니다.

관련 문제