gpt4 book ai didi

javascript - 代号一个 javascript 回调

转载 作者:行者123 更新时间:2023-12-01 16:31:56 25 4
gpt4 key购买 nike

我正在尝试在我的应用中显示同意页面。该页面应以 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表达式不是原因。

我想知道哪一部分出了问题?任何帮助表示赞赏。

最佳答案

回到原来的问题,这个问题似乎很容易解决,而且比简单的click更多的数据。事件也可以传递。


方法一:

使用 <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中的说明获取表单数据.


方法二:

将 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);

一些事后的想法:

  1. WebEventListener不能与 BrowserNavigationCallback 一起使用
  2. 将 json 作为 base64 字符串传递很困难,请参阅 Unicode Problem
  3. 同时 encodeUrl()是公开的(在 Util 中),反函数在 BrowserComponent 中是私有(private)的.这使得将 js 对象作为 url 传递变得复杂
  4. 在方法 2 中使用 bc.addJsCallback而不是 execute多次回调

希望这对某人有帮助

关于javascript - 代号一个 javascript 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com