//external 服务器 import win.ui; /*DSG{{*/ var winform = win.form(text="RPC 服务端 - 支持任意本地网页调用 aardio 函数";right=759;bottom=469) winform.add( edit={cls="richedit";left=23;top=24;right=730;bottom=446;edge=1;hscroll=1;multiline=1;vscroll=1;z=1} ) /*}}*/ import web.rpc.externalServer; var externalServer = web.rpc.externalServer(); //只有下面指定的函数网页才能调用 externalServer.external = { test = function(...){ winform.edit.print("external.test 被调用",...) } tag = function(strs,...){ var args = {...} for(i=#args;1;-1){ table.insert(strs,args[i],i+1); } strs = string.join(strs); return strs; } } //可选用下面的方法限定只有下面允许的外部域名才能访问 aardio 函数 externalServer.accessControlAllowOrigin = { ["https://d.aardio.com"] = true //指定准确前缀,域名后不要加斜杠 } //如果不指定端口号,则默认动态分配空闲的端口号 //如果不指定具体的端口号,则只有 externalServer 提供的网页才能自 aardio.js 自动获取到端口号 winform.edit.print( "启动服务器:",externalServer.start()) winform.edit.print( "请在网页中引入:",externalServer.getUrl("aardio.js")) externalServer.httpHandler["/test.html"] = function(response,request){ var html = /**
=owner.rpcUrl?> **/ response.write( string.loadcode(html,{rpcUrl=externalServer.getUrl("aardio.js")}) ); } import process; process.openUrl(externalServer.getUrl("/test.html")) /* 如果传入小写 http: 或 https: 开头的网址, 则返回了附加 rpcServerPort 与 rpcAasdl 参数的网址, aardio.js 识别这些参数后自动获取 RPC 端口并初始化 RPC 方法。 未传以上参数则网页中必须调用 aardio.open 连接指定的端口。 */ var rpcUrl = externalServer.getUrl("https://d.aardio.com/ajs/demo.html"); process.openUrl( rpcUrl ); //上面 demo.html 的源码如下: /** **/ winform.show(); win.loopMessage();