我是Android的新手,并且重用了IOS中使用的javascript代码。
该代码要求从Android传递数据。到目前为止,我看过的教程都传递了一条烤面包消息或一个简单的字符串。
我该如何从Android传递数据,在这里我可以通过javascript访问数据,就像访问data.question
或data.choices
一样?
此外,下面的JavaScript在passData()
函数中将用户选择的答案返回给Android。有人可以提供示例代码,说明我如何接受和处理Android的返回值吗?我正在使用Kotlin。
<script type="text/javascript">
function printData(data) {
var questionLabel = document.getElementById("question")
questionLabel.innerHTML = data.question
var counterLabel = document.getElementById("counter")
counterLabel.innerHTML = "Question " + data.activityCounter + " of " + data.numberOfActivities
var im = document.createElement('img');
if (data.graphicURI != null) {
im.src = data.graphicURI;
im.className = 'img-fluid img-rounded image-question';
document.getElementById('imageContainer').appendChild(im)
}
var i=0, doc = document, docFrag = document.createDocumentFragment();
for (; i < data.choices.length ; i++){
var elem = doc.createElement('input');
elem.type = 'button';
elem.className = 'card mb-3 col-10 card-body';
elem.value = data.choices[i];
elem.tag = i;
elem.addEventListener("click", function() {
passData(this.value)
}, false);
docFrag.appendChild(elem);
}
document.getElementById("choicesContainer").appendChild(docFrag);
if (((window.innerHeight + window.scrollY) >= document.body.offsetHeight) == false) {
document.getElementById("seeBottom").style.display = "block";
}
}
function passData(data) {
if (confirm("Are you sure you want to submit?")) {
console.log("yes");
window.webkit.messageHandlers.answer.postMessage(data);
} else {
console.log("nO");
}
}
</script>
答案 0 :(得分:0)
首先,我们需要在javascript代码和客户端android代码之间创建一个接口,
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void sendValueToAndroid(int value) {
// Do your operations on value here
// For example:
value = value * 500;
Toast.makeText(getContext(),"Value is :" + value , Toast.LENGTH_SHORT).show();
}
}
注意:不要忘记在函数上方添加@JavascriptInterface
注释,否则JS将无法识别该函数
然后我们可以将该界面绑定到网络视图,
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
现在设置了android代码和javascript之间的接口。我们可以将数据从javascript共享到android。
为了访问javascript端中的函数,请像这样调用函数,
Android.sendValueToAndroid(5);
Android 是我们用来表示JS这是android方面的功能的标识符。
因此,为了具有类似的其他功能,请将其添加到WebAppInterface类中,然后可以像这样在JS端访问该功能
Android.yourFunction();