簡體   English   中英

在所有平台(包括iOS,ANDROID)上,通過Delphi XE6上的javascript從TWebBrowser回調Delphi函數?

[英]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&param2&param3&param4”;
</script>

要么

<script language=”javascript”>
window.navigate(”javascript:thisisatest();”);
</script>

並查看OnShouldStartLoadWithRequest的URL屬性OnShouldStartLoadWithRequest包含#param1&param2&param3&param4javascript: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&param2&param3&param4”;

然后運行計時器以檢查TWebBrowser.URL,獲取參數,調用JSFeekback,重置URL。

或沒有計時器,像這樣的代碼:

  wb1.EvaluateJavaScript("window.location.href=”#param1&param2&param3&param4”;");
  getParams(wb1.URL);
  JSFeekback(p1, p2, p3, p4);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM