根据木瓜的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 事件根本就没被触发