我正在尝试在我的应用中显示同意页面。页面应该用html编写,因此应用程序需要处理来自浏览器的按钮单击事件。我试图复制the example in blog(减去jQuery部分):
bc.addJSCallback(
"document.getElementById('ACCEPT').addEventListener('click', function(){callback.onSuccess(true)})",
res -> {
System.out.println(res);
dialog.dispose();
}
);
html看起来像这样:
<html>
<button id='ACCEPT'>Accept</button>
<button id='DECLINE'>Decline</button>
<script></script>
</html>
单击按钮时没有任何反应。但是,当js表达式放在<script>
标记中时,会记录'callback' is not defined
,这表明js表达式不是原因。
我想知道哪个部分出了问题?任何帮助表示赞赏。
答案 0 :(得分:0)
回到原始问题,似乎可以很轻松地解决问题,并且可以传递比简单click
事件更多的数据。
方法1:
使用<form>
或<a>
将BrowserComponent
重定向到任何页面,然后收听
导航事件,例如
bc.addBrowserNavigationCallback(url -> {
if (url.equals(initialPath)) {
return true; //Show the first page, but do no subsequent redirection
}
//Do something here with data encoded in url
});
可以如this link中所述获取表格数据。
方法2:
将JavaScript对象注册为按钮的onclick
或注册为function
的JavaScript,如documentation中所述。
bc.addWebEventListener(BrowserComponent.onLoad, evt -> {
bc.execute("window.cb = json => {callback.onSuccess(json);};", json -> {
//Do something with the data here (a json in this case)
});
});
...和javascript
const handleFormSubmit = event => {
event.preventDefault();
const data = formToJSON(form.elements); //Refer to link above
const json = JSON.stringify(data);
//const d = btoa(json); Does not work with unicode character
cb(json);
};
const form = document.getElementsByName('formmm')[0];
form.addEventListener('submit', handleFormSubmit);
一些事后思考:
WebEventListener
不能与BrowserNavigationCallback
encodeUrl()
是公开的(在Util
中),反函数在BrowserComponent中是私有的。这会使通过js对象作为url传递变得复杂bc.addJsCallback
而不是execute
回调一次以上希望这对某人有帮助