当前位置: 代码迷 >> VFP >> VFP怎么与WebBrowser的函数交互
  详细解决方案

VFP怎么与WebBrowser的函数交互

热度:9933   发布时间:2013-02-26 00:00:00.0
VFP如何与WebBrowser的函数交互?
根据木瓜的WebBrowser示例(揭密脚本语言中函数名赋值在VFP中的实现)
应用成新示例:在Web点击圆,半径会加大15, 想请教VFP如何拦截Web函数将圆半径再加大到20?
*-------------------Html5内联Svg 网页代码如下:
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  <script>
  function doCircle(circle_id, circle_r) 
  {
var theCircle = document.getElementById(circle_id);  
  var radius = parseInt(theCircle.getAttribute("r"))+ parseInt(circle_r);

  if (parseInt(circle_r) == 15) 
  {
  alert("Web: " + circle_r);
  }
  else 
  {
  alert("VFP: " + circle_r); // 弹出提示信息  
  }
 
  if (radius > 100) 
  {
  radius = 50;
  }
  theCircle.setAttribute("r",radius);
  }
  </script>
</head>

<body>
  <svg width="300px" height="300px">
  <text x="25" y="50" font-size="24">SVG Circle Element</text>
  <text x="25" y="275">Click the circle to change its size.</text>
  <circle id="circle_1" cx="125" cy="150" r="50" 
  fill="pink" stroke="green" stroke-width="5"
  onclick="doCircle('circle_1',15)"/>
  </svg>
</body>

</html>

*-------------------VFP代码如下:
* VFP截取Web函数示例:Web点击已不起作用
* 使用说明:
* 因为是html5,要用IE9以上吧,我是Win8+IE10
* 新建一项目名为 VFP,然后编译成COM,直接在开发环境中运行此代码即可。
* Power by 木瓜 2009

PUBLIC oForm
oForm=NEWOBJECT("WebBrowser")
oForm.Show
RETURN

DEFINE CLASS WebBrowser AS Form
Height = 400
Width = 500

ADD OBJECT web as olecontrol WITH ;
Top = 0, ;
Left = 0, ;
Height = 400, ;
Width = 500, ;
Oleclass ="Shell.Explorer",;
Anchor=15,;
Name = "web"

PROCEDURE Init
thisform.web.navigate(SYS(5) + SYS(2003)+ "\Html5内联Svg")
thisform.AddProperty("oEventHandler",NewObject("VFP.WebBrowerHander2")) &&关键,在这里创建VFP COM对像
thisform.oEventHandler.SetObject(thisform)
ENDPROC

*VFP版OnContextMenu,此函数将截取Web浏览器控件的右键菜单
*返回真时,弹出默认的菜单,否则在强制终止
*这里你可以做任何事情,显示自己的菜单也可以。。
PROCEDURE onclick
*Web原将Web圆半径加大15,经VFP处理
If MessageBox("圆半径加大10还是20 ?",32+4) =7
Return "doCircle('circle_1',10)"
Else
Return "doCircle('circle_1',20)"
EndIf 
ENDPROC


PROCEDURE web.DocumentComplete
*** ActiveX Control Event ***
LPARAMETERS pdisp, url
this.object.Document.getElementById("circle_1").onclick=thisform.oEventHandler &&这里就是JS或VBS脚本里的函数名赋值在VFP中的实现


ENDPROC
Procedure web.Destroy
this.object.Document.getElementById("circle_1").onclick=NULL &&解除绑定
EndProc 
EndDefine

* WebBrower OnContextMenu 接口实现
Define Class WebBrowerHander2 as session olepublic 

* Procedure OnContextMenu() as Boolean 
Procedure onclick() as string
Return this.Obj.onclick()
EndProc 

Procedure SetObject(oObj) &&引用对像
this.AddProperty("Obj",oObj)
EndProc 

EndDefine 



------解决方案--------------------------------------------------------
试了一下你上面的代码
问题是在我的机器上,web 控件的 DocumentComplete 事件根本就没被触发
  相关解决方案