webView1.evaluateJavascript("return \"test\";", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Log is written, but s is always null
}
});
그 결과 이 방법을 반품해야 어떻게 합니까?
[1]: http://developer.android.com/reference/android/webkit/WebView.html # %20android.webkit.valuecallback% 3cjava.lang.string% 3e% 29 evaluateJavascript% 28java.lang.string,
There is an 들면 에바루아테자바스크리프트 사용되고 있으며, 이 방법 예제:
https://github.com/GoogleChrome/chromium-webview-samples/tree/master/jsinterface-example
기본적으로, 만약 javascript 에서 실행한 웹보기 it& # 39 전달된 값을 반환하는 콜백하는 될 겁니다.
(주) 는 json 의 값을 하나가 되는 것은 구체화하십시오 반환되었습니다 알아두십시오 모리세이베발루 json 객체인지 또는 따라 json 어레이입니다 너희는너희가 귀의하노라
참고 사항) 는 단일 값을 사용해야 할 경우 우리 섹스한거요 복귀하십시오 세트레니나 (true) 를 위한 JSON 판독기에서 사용할 수 있습니다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// In KitKat+ you should use the evaluateJavascript method
mWebView.evaluateJavascript(javascript, new ValueCallback<String>() {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onReceiveValue(String s) {
JsonReader reader = new JsonReader(new StringReader(s));
// Must set lenient to parse single values
reader.setLenient(true);
try {
if(reader.peek() != JsonToken.NULL) {
if(reader.peek() == JsonToken.STRING) {
String msg = reader.nextString();
if(msg != null) {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
}
}
}
} catch (IOException e) {
Log.e("TAG", "MainActivity: IOException", e);
} finally {
try {
reader.close();
} catch (IOException e) {
// NOOP
}
}
}
});
}
그 이유는 아직도 할 수 있습니다 사용할 수 있으며, 이는 JSON 응답이 파서는 문자열으로 변환되었습니다 랩된 따옴표로 가치를 알게 될 것입니다.
예를 들어 너회가 갔다.
mWebView.evaluateJavascript("(function() { return 'this'; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints: "this"
}
});
이 구체화하십시오 인쇄인쇄 랩된 큰따옴표 수 있지 않을까 생각한다 "고 말했다. this" ";).
다른 예는 건 눈여겨볼 만한 부분.
mWebView.evaluateJavascript("(function() { return null; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints the string 'null' NOT Java null
}
});
mWebView.evaluateJavascript("(function() { })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); //s is Java null
}
});
mWebView.evaluateJavascript("(function() { return ''; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints "" (Two double quotes)
}
});
다음은 '결과' 좋아, 그럼 바뀌어 아웃해야 호츨 - 결과 Javascript 의 Javascript 로 한 것처럼 명령을 입력하는 그렇고여 콘솔이군요.
그래서 얻기 위해 되기 때문에 랩된 받을시간은 기능:
webView1.evaluateJavascript("(function() { return \"this\"; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints 'this'
}
});
또한 작업:
webView1.evaluateJavascript("window.variable = \"asd\";", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints asd
}
});
처리하는 방법 또한 Javascript 객체:
webView1.evaluateJavascript("(function() { return { var1: \"variable1\", var2: \"variable2\" }; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Prints: {"var1":"variable1","var2":"variable2"}
}
});
[안드로이드제스코리] (https://github.com/ericwlange/AndroidJSCore) 는 JavaScript 를 사용하지 않는 좋은 방안 평가하는 웹보기.
함께 하는 JavaScript 를 평가하십시오 웹보기 싶으면 안드로이드 (4+), 이것은 이전 버전의 리틀이에요 라이브러리:
https://github.com/evgenyneu/js-evaluator-for-android
jsEvaluator.evaluate("put your JavaScript code", new JsCallback() {
@Override
public void onResult(final String result) {
// get result here (optional)
}
});
Json 을 사용하지 않고 답을 요약하십시오 @GauntFace 대안 솔루션으로 제공하십시오 파서:
그냥 '와' JS 함수는 경우 문자열이어야 you& # 39 는 Java 로 해, re 이유에 대한 불안감 때문에 # 39 의 it& 문자열이어야 it& # 39 의 json 이스케이프된.
mWebView.evaluateJavascript("(function() { return 'Earvin \"Magic\" Johnson'; })();", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s);
// expected: s == Earvin "Magic" Johnson
// actual: s == "Earvin \"Magic\" Johnson"
}
});
참고로, '모리세이베발루' 는 항상 a 'String' JS 기능을 동시에 여러 ipv6-literal. 반환할 수 있습니다 'null', etc.)
문자열 값을 얻을 수 있는 경우, 100% # 39 동일합니까 you& re, re you& JS 반드시 제대로 된 ',' # 39 검색되어야 문자열이어야 반환되었습니다 you& json 어니스카피 해버린다는거, 예를 들어, d # 39 하는 것을 좋아한다.
String unescaped = s.substring(1, s.length() - 1) // remove wrapping quotes
.replace("\\\\", "\\") // unescape \\ -> \
.replace("\\\"", "\""); // unescape \" -> "
하지만 그건 ',', '" null" 문자열으로 수 있도록 적절한' null 'JS 되돌려줍니다 경우 그 첫 단계로 매우 분명히 확인해야 한다.
if ("null".equals(s)) {
...
} else {
// unescape JSON
}
"' @JavascripInterface public void 론다타 () { 마웹비에프스바루아테자바스크리프트 (" " javascript 에스쿠테네스트 (),, null); } "' 를 변경할 수 없기 스레드할 자바브리지 차단 될 것입니다. 그 안에 설치할 경우 에바루아테자바스크리프트. 이렇게 함께 할 "' @JavascripInterface public void 론다타 () { 마웹비에 w. 프로스트 (새로운 실행 가능한 () { @Override public void 실행하십시오 () { 마웹비에프스바루아테자바스크리프트 (" " javascript 에스쿠테네스트 (),, null); } }).
} "'