![](/img/trans.png)
[英]How can I use javascript in TWebBrowser in Delphi XE5 on all platforms (IOS,WIN,ANDROID)?
[英]Callback Delphi function from TWebBrowser by javascript on Delphi XE6 for all platforms (including iOS, ANDROID)?
我需要在用於Android和iOS的Delphi XE6上創建一個應用程序。 此應用程序可能需要使用TWebBrowser來顯示Google Maps,然后我需要將“從Delphi”發送到javascript,並將“接收”命令從javascript發送到Delphi。 這樣,我可以在地圖上顯示市場,然后知道用戶何時單擊標記。 我在網上發現了這篇文章 ,可通過Delphi代碼執行javascript。
但是我不知道如何從javascript調用delphi過程。 例如,我在Delphi上有以下過程:
procedure JSFeekback(aParm1, aParm2, aParm3, aParm4: string);
我想在TWebBrowser上使用Javascript代碼將其稱為傳遞4參數。 我發現了類似的問題,但僅適用於Windows應用程序,答案在Android上不起作用(我還沒有在iOS上嘗試過)。
正確的方法是使用Android WebView的addJavascriptInterface
函數,如此處 , 此處和此處所示 。
Firemonkey TWebBrowser默認情況下不公開此功能。
有一個在DPF的Android定制的WebView包裝控件可以看出這里 。
您可以修改該控件以添加addJavascriptInterface
函數。
對於IOS上的TWebBrowser,您可以使用sourceforge和此處的自定義Web瀏覽器控件。
另一種可行的方法是使用OnShouldStartLoadWithRequest
事件。 您可以執行以下操作:
<script language=”javascript” type=”text/javascript”>
window.location.href=”#param1¶m2¶m3¶m4”;
</script>
要么
<script language=”javascript”>
window.navigate(”javascript:thisisatest();”);
</script>
並查看OnShouldStartLoadWithRequest
的URL屬性OnShouldStartLoadWithRequest
包含#param1¶m2¶m3¶m4
或javascript:thisisatest();
。
基本上,這個想法是導航到一個不會更改現有頁面URL的URL,然后在OnShouldStartLoadWithRequest
事件中選擇該URL。
使用JavaScript,例如通過jQuery訪問HTTP服務器是很常見的。 如果您可以通過本地服務器或Web上的HTTP使用Delphi代碼,則您的JavaScript代碼可以通過發送HTTP請求來調用Delphi代碼,並作為HTTP響應從Delphi函數接收數據。
另一種選擇是WebSockets。 它們是HTTP的擴展,以異步方式工作,因此Delphi服務器可以將數據發送到腳本-無需先等待請求(稱為服務器請求/彗星)。
這將是基於標准的,廣泛使用的解決方案,它不依賴於特定的Web客戶端。 免費的開源庫Internet Direct(Indy)可以在所有受支持的平台上使用,以創建HTTP服務器(獨立的或與您的應用程序集成)。
JavaScript和服務器之間可用於通信的其他協議也可能值得一看,例如STOMP。
對於您的特定功能,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,獲取參數,調用JSFeekback,重置URL。
或沒有計時器,像這樣的代碼:
wb1.EvaluateJavaScript("window.location.href=”#param1¶m2¶m3¶m4”;");
getParams(wb1.URL);
JSFeekback(p1, p2, p3, p4);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.