对于所有平台(包括iOS,ANDROID),在Delphi XE6上通过javascript调用TWebBrowser的Delphi Delphi函数?
我需要在Delphi XE6上为Android和iOS创建一个应用程序。 这个应用程序最好使用TWebBrowser来显示谷歌地图,然后我需要从Delphi“发送”到javascript并从javascript“接收”命令到Delphi。 通过这种方式,我可以在地图上显示市场,然后知道用户何时点击标记。 我在网上发现这篇文章用Delphi代码执行javascript。
但我不知道如何从javascript调用delphi程序。 例如,我在Delphi上有这个程序:
procedure JSFeekback(aParm1, aParm2, aParm3, aParm4: string);
我想在TWebBrowser上使用Javascript代码将其称为pass 4参数。 我发现了类似的问题,但仅适用于Windows应用程序,答案不适用于Android(我没有在iOS上试过)。
正确的方法是使用Android WebView的addJavascriptInterface
函数,可以在这里 , 这里和这里看到。
Firemonkey TWebBrowser默认情况下不公开此function。
DPF Android中有一个自定义WebView包装器控件,可以在这里看到。
您可以修改该控件以添加addJavascriptInterface
函数。
对于IOS上的TWebBrowser,您可以在sourceforge和此处使用自定义Web浏览器控件。
另一种可能的方法是使用OnShouldStartLoadWithRequest
事件。 你可以这样做:
要么
并查看OnShouldStartLoadWithRequest
的URL属性OnShouldStartLoadWithRequest
包含#param1¶m2¶m3¶m4
或javascript:thisisatest();
。
基本上,我们的想法是导航到一个不改变现有页面URL的URL,并在OnShouldStartLoadWithRequest
事件中获取该URL。
使用JavaScript,访问HTTP服务器非常常见,例如通过jQuery。 如果您可以通过HTTP提供Delphi代码,或者作为Web上的本地服务器,您的JavaScript代码可以通过发送HTTP请求来调用Delphi代码,并从Delphi函数接收数据作为HTTP响应。
另一个选项是WebSockets。 它们是HTTP的扩展,异步工作,因此Delphi服务器可以将数据发送到脚本 – 而不必先等待请求(称为服务器推送/ Comet)。
这将是一个基于标准,广泛使用的解决方案,它不依赖于特定的Web客户端。 免费的开源库Internet Direct(Indy)可以在所有支持的平台上使用,以创建独立的HTTP服务器或与您的应用程序集成。
其他可用于JavaScript和服务器之间通信的协议也值得一看,例如STOMP。
对于您的特定function,HTTP调用可以使用带参数的GET请求:
http://localhost/JSFeekback?par1=val1&par2=val2&par3=val3&par4=val4
可以在javascript中更改TWebBrowser.URL
:
window.location.href=”#param1¶m2¶m3¶m4”;
然后运行一个计时器来检查TWebBrowser.URL,获取params,调用你的JSFeekback,重置URL。
或者没有计时器,代码如下:
wb1.EvaluateJavaScript("window.location.href=”#param1¶m2¶m3¶m4”;"); getParams(wb1.URL); JSFeekback(p1, p2, p3, p4);
- 在iOS上使用null调用forge.facebook.uicallback
- 为什么在线编程课程就像体育馆订阅。
- React Native,NavigatorIOS,undefined不是一个对象(评估'this.props.navigator.push')
- 如何擦除,清除,擦除保存在iPad上的主屏幕上的Web应用程序的HTML 5 localstorage?
- 如何在iPhone上的Phonegap中运行后台JavaScript – 用于定时器/秒表?
- 在iOS中使用Swift捕获Javascript事件
- iOS divdynamic滚动没有固定的高度(内容通过ajax加载)?
- 如何从iOS 7中的WebApp打开Safari
- 使用javascript创buildcsv文件