DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: a12315
今日帖子: 53
在线用户: 8
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/3/13 14:03:05
标题:
JavaScript 和 Delphi 相互调用的神器-ScriptGate 浏览:8315
加入我的收藏
楼主:      在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还要改 FMX 的源码,相当繁琐。

    现在使用 ScriptGate 可轻易解决这个问题,ScriptGate  支持 Windows, macOS, Android, iOS,非常好用,强烈推荐。

    项目地址:https://bitbucket.org/freeonterminate/scriptgate

     用法如下:
HTML / JavaScript:

<html> 
  <header> 
    <script type="text/JavaScript"> 
      function helloJS() { alert("Hello, JavaScript!"); return "Hello !!"; }
    </script> 
  </head> 

  <body> 
    <br><br> 
    <a href="delphi:HelloDelphi()">Call Delphi procedure</a> 
  <body> 
</html>;

Delphi:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Binding ScriptGate to WebBrowser and setting the scheme delphi
  // The scheme is also specified on the JavaScript side
  // Same as file :, JavaScript: etc.
  ScriptGate := TScriptGate.Create(Self, WebBrowser1, 'delphi');
end;

// Call helloJS () JavaScript.
// You can also retrieve the return value using an anonymous function.
procedure TForm1.Button1Click(Sender: TObject);
begin
  FScriptGate.CallScript(
    'helloJS()',
    procedure(const iResult: String)
    begin
      ShowMessage(iResult); // Show return value
    end
  );
end;

// Execute arbitrary JavaScript
// You can also retrieve the return value using an anonymous function.
procedure TForm1.Button1Click(Sender: TObject);
begin
  FScriptGate.Eval(
    'document.getElementsByTagName("html")[0].outerHTML',
    procedure(const iResult: String)
    begin
      ShowMessage(iResult); // Show return value
    end
  );
end;

// It is a method published in JavaScript and is called from JavaScript.
procedure TForm1.HelloDelphi;
begin
  ShowMessage('Hello, Delphi!');
end;
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2018/3/13 14:09:17
1楼: 厉害,好东西啊!
----------------------------------------------
虽千万人吾往矣!
作者:
男 ritapl (ritapl) ★☆☆☆☆ -
盒子活跃会员
2018/3/13 14:23:30
2楼: 只能用WebBrowser吗?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/3/13 14:36:54
1楼: 的确很有用处。建议大家都用用。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 5bug (5bug) ▲▲▲△△ -
普通会员
2018/3/13 15:03:23
3楼: 非常好的东西!赞!感谢啊!
----------------------------------------------
- 写什么呢?http://www.5bug.wang
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2018/3/13 15:06:57
3楼: 确实是很方便的方法。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 ke8880 (ke8880) ★☆☆☆☆ -
普通会员
2018/3/13 19:22:02
4楼: 这个只能在FireMonkey 中使用吗?
----------------------------------------------
-
作者:
女 zsdwxm (zsdwxm) ★☆☆☆☆ -
普通会员
2018/3/13 19:24:00
5楼: 确实不错,谢谢分享!
----------------------------------------------
-
作者:
男 boyla (土著巫师) ★☆☆☆☆ -
普通会员
2018/3/13 19:36:07
6楼: 有点意思!
----------------------------------------------
妹聊的不是BUG是追求,哥写的不是CODE是梦想。
作者:
男 akay (akay) ★☆☆☆☆ -
普通会员
2018/3/14 9:16:43
7楼: duktape是一款嵌入式JavaScript引擎,使用C开发,可用于Windows/Linux等开发的应用程序中。它可以让你使用C/C++开发的程序中具有运行Javascript脚本的能力,可以为引擎扩展函数,让Js脚本调用C/C++函数,功能非常强大。

如果能改用这个JS引擎,会更实用。毕竟带个WebBrowser太重。
----------------------------------------------
-
作者:
男 lufangyu (伟人录) ★☆☆☆☆ -
盒子活跃会员
2018/3/14 9:27:50
8楼: 楼上的看法很好。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/3/14 10:30:45
9楼: 这个只是浏览器扩展,他的目标是增强浏览器,而且你不需要修改 EMB 的源码。
仅此而已。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 lufangyu (伟人录) ★☆☆☆☆ -
盒子活跃会员
2018/3/14 11:00:54
10楼: 测试了一下,32、64、安卓,都正常按此在新窗口浏览图片 按此在新窗口浏览图片 按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 edwinyeah (Edwin) ★☆☆☆☆ -
盒子活跃会员
2018/3/14 20:23:11
11楼: @akay, 还真有duktape js引擎的delphi封装包,是一个国外大牛,真正的大牛推出的: https://github.com/grijjy/DelphiDuktape

不过我觉得更推荐 微软的 chakracore js引擎的Delphi封装 (https://github.com/tondrej/chakracore-delphi)

因为Duktape对js语法的支持主要是ES5,而ChakraCore对ES6支持非常完善!
----------------------------------------------
-
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/4/4 21:13:52
12楼: 高手,使用!
----------------------------------------------
-
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/4/4 21:17:50
13楼: 大多是Android,不知IOS下有人用没
----------------------------------------------
-
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/4/4 21:26:53
14楼: 果然牛逼
----------------------------------------------
-
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2018/4/5 22:31:37
15楼: Web UI 利器 www.sciter.com
国内朋友 改编的 sdk for delphi
https://github.com/gxlmyacc/sciter4d
最近做的项目
此帖子包含附件:
PNG 图像
大小:173.7K
----------------------------------------------
-
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2018/4/5 23:12:32
16楼: function TfrmMain.LoadPlantinfo: string;
var
  RemoteServer: TServerMethods1Client;
  JsonData: String;
begin
  try
    if not Assigned(ClientModule1) then
      ClientModule1 := TClientModule1.Create(nil);
    RemoteServer := TServerMethods1Client.Create(ClientModule1.DSRestConnection1);
    JsonData := RemoteServer.GetPlantinfo(); 
    if JsonData <> '' then
    begin
      Result := JsonData;
    end;
  except
  end;
end;

----------

<script type="text/tiscript">

    function self.ready() {
      var param = view.LoadPlantinfo();
      GetPlantInfo(param); //填充表格
    }

     function GetPlantInfo(parameters){
        var records = JSON.parse(parameters);
        var vlist = $(table);
        vlist.value = records;
     }
</script>
----------------------------------------------
-
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2018/4/5 23:15:10
17楼:  <widget type="select" id="report">
  <table resizeable>
    <thead>
      <tr>
          <th><input#select-all|checkbox /></th>
          <th>序号</th>
          <th>种植项目</th>
          <th>数量</th>
          <th>单位</th>
          <th>补助金额</th>
          <th>备注</th>
      </tr>
    </thead>
    <tbody>
      <tr>
          <td><input(selected)|checkbox /></td>
          <td(plant_id)></td>
          <td(plant_name)></td>
          <td(number)></td>
          <td(unit)></td>
          <td(money)></td>
          <td(remark)></td>
      </tr>
    </tbody>
  </table>
  </widget>
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2018/4/6 10:43:17
18楼: 这个好呀!
----------------------------------------------
-我的博客
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2018/4/6 11:20:57
19楼: 做广告还歪楼。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 gengyonghui (gyh) ★☆☆☆☆ -
普通会员
2018/4/6 11:30:12
20楼: 有支持c++ builder的组件不?
----------------------------------------------
-
作者:
男 wuxiangyang (wxy) ★☆☆☆☆ -
盒子活跃会员
2018/4/10 15:46:16
21楼: 有官方是C++ 的SDK, 有个俄罗斯的MIKALAOSHI 做的控件,CB 可以用,但现在不更新了请在www.github.com 搜 sciter , 各种语言的支持
----------------------------------------------
-
作者:
男 delphiteacher (delphiteacher) ▲▲▲▲▲ -
普通会员
2018/6/25 18:40:32
22楼: 好东西,刚好用上。
----------------------------------------------
欢迎加入OrangeUI的app开发阵营:http://www.orangeui.cn/,联系QQ452330643
作者:
男 delphiilove (乌羽玉) ★☆☆☆☆ -
普通会员
2018/6/26 9:58:15
23楼: IOS 测试通过
----------------------------------------------
-
作者:
男 bbnn38 (伟大的咸鱼) ★☆☆☆☆ -
普通会员
2018/6/26 21:31:05
24楼: 很好的东西
----------------------------------------------
-
作者:
男 ww66 (wzs) ★☆☆☆☆ -
普通会员
2018/6/29 21:21:35
25楼: 多谢, 很好的东西
----------
----------------------------------------------
http://www.inteLw.cn:8077
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2018/6/30 13:08:17
26楼: 真是好东西!
顶!
----------------------------------------------
-我的博客
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/6/30 13:30:13
27楼:
----------------------------------------------
-
作者:
男 jianlei (剑雷) ★☆☆☆☆ -
盒子活跃会员
2018/7/1 14:54:38
28楼: sciter4d不开源,推荐出来有意义吗
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2018/7/2 15:40:21
29楼: 厉害
----------------------------------------------
-
作者:
男 inrain2012 (Inrain) ▲▲△△△ -
普通会员
2021/4/11 14:33:21
30楼: 问题来了,只能在A HREF调用DELPHI方法吗??能否在JS代码里调用DELPHI的方法了?
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/4/12 18:18:40
31楼: Delphi 调用 WebBrowser 里面的 js 是很有用的。几年前我测试过直接在 Delphi 的 APP 里面嵌入一个浏览器调用百度地图的 URL 出现地图,然后 APP 自己从 GPS 活得当前的 GPS 坐标,然后 APP 调用浏览器内部的百度地图提供的 JS API 把这个 GPS 坐标打点在地图上。
----------------------------------------------
-
作者:
男 testerhook (CaptainHook) ★☆☆☆☆ -
普通会员
2021/4/14 9:53:19
32楼: PC端的Webbrower非常不好用,毕竟调用的IE内核,还是缺斤短两的IE内核。PC端直接用cef4Delphi是最省事的,就是发布文件要大个两百兆左右,还要自己去编译支持h264视频的运行库,这点比较折磨人。
----------------------------------------------
-
作者:
男 xenli (流浪) ▲▲▲△△ -
普通会员
2021/4/27 11:31:45
33楼: 只能调用不能修改吗?
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
男 zdzwww (jacob) ★☆☆☆☆ -
盒子活跃会员
2022/4/20 15:21:43
34楼: ios下js无法调用delphi方法,android下可以。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/4/20 17:23:34
35楼: 32楼,PC 端,现在可以采用 TEdgeBrowser 这个基于 Edge 浏览器的 Web Browser 控件了。这样,任何现代流行的 Java-Script 库你都可以拿来用到 Delphi 的程序里面了。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行109.375毫秒 RSS