我也遇到过,但是重新建立一个OCX控件,把原来的代码在复制一遍试试。还有好像是在JS里真正的监控了这个方法,FEvents中才不为空。否则也是空!我有一次写一个无窗体的OCX控件,也是自己做了一个方法。但是就是不执行,但是最后发现JS监控事件的时候写错了。你可以检查一下,OCX创建以及JS监控事件的代码。看看有没有什么问题。确实很奇怪,但是跟有窗口和无窗口好像也没什么关第。我在网上也找了很久,也没找到什么原因。后来自己重新创建才搞定!
解决方案 »
- 关于密码框显示文本提示的问题-------新手求助!!!!!
- 淘宝首页图片轮转广告
- javascript学习
- 关于字符串的问题????????????
- 关于弹出窗口的问题?
- 急求:通過JavaScript向已有的XML添加數據.
- windows media player作为ie插件播放audio时如何显示象用windows media player播放器中播放audio时出现的可视化效果.
- -----> 100分求htc 的问题 <-----
- ie5中要定义 undefined 应该怎么写呢?
- 在htc中使用window.setInterval遇到的问题,请htc高手帮帮忙!
- 在DispHTMLDivElement中实现类似getElementsByName的功能
- eval获取对象,firefox的对应写法
1、首先在OCX控件的事件接口中建立了一个回调函数,OnTest(aValue:Integer);
2、在WEB页面中加载ocx控件:
<object classid="clsid:E9D9B85E-D066-40DC-8191-DD75778356C1" id="FPInfo" width="0"
height="0">
</object>
3、监控回调函数
<script language="javascript" event="OnTest(aValue)" for="FPInfo">
alert(aValue);
</script>我是这样做的,没有什么问题啊,注意for="FPInfo"中的FPInfo是ocx控件的在页面中的ID!
var myobj=document.getElementById("ocxtype");//方法1
和
myobj = new ActiveXObject("Banger_PhoneAssembly.PhoneAssembly")
这2个得到的对象 注册事件的方法还不一样。
第一个 可以myobj.attachEvent("OnIncomeTalkEvent",OnIncomeTalk);
我是用带窗体的工程试的 可以 测试通过了
第二个 我用的方法是myobj.setEventHandler(new IncomeTalkEventHandler());
function IncomeTalkEventHandler()
{
}
IncomeTalkEventHandler.prototype.OnIncomeTalkEvent =
function (ANumber)
{
alert("测试事件");
t3.value=ANumber;
}
出错了 Delphi里面报灾难性故障 Project iexplore.exe raised exception class EOleSysError with message '灾难性故障'.
<script language="javascript" event="OnTest(aValue)" for="FPInfo">
alert(aValue);
</script>这样?
你可以试试我的方法,在页面中直接就object创建,而不要用NewActiveX。然后面页面中写<script language="javascript" event="OnTest(aValue)" for="FPInfo">
alert(aValue);
</script>
JS函数试试。
js代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<input type="button" id="look" value="Create" onclick="showall()">
<INPUT TYPE="button" value="拨号" onclick="OnDail()">
<input name="t2" type="text" id="t2">
<INPUT TYPE="button" value="挂断" onclick="OnHangUp()">
<TEXTAREA name="t3" ID="t3"></TEXTAREA>
<TR><TD>
<OBJECT ID="ocxtype" CLASSID="C932CEB4-B779-44D8-929C-C9B0CB5D1346"></OBJECT>
<script language="javascript" event="OnIncomeTalkEvent(ANumber)" for="ocxtype">
alert(ANumber);
</script>
<SCRIPT LANGUAGE="jscript" >
var myobj;
function OnDail()
{
myobj.PhoneDail(t2.value);
}
function OnHangUp()
{
myobj.HangUpPhone(t2.value);
}
function showall()
{
myobj = new ActiveXObject("Banger_PhoneAssembly.PhoneAssembly")
}
function IncomeTalkEventHandler()
{
}
IncomeTalkEventHandler.prototype.OnIncomeTalkEvent =
function (ANumber)
{
alert("测试成功,点击事件");
t3.value=ANumber;
}
</SCRIPT>
</TD></TR>
</body>
</html>
{}
IncomeTalkEventHandler.prototype.OnIncomeTalkEvent =
function (ANumber)
{
alert("测试成功,点击事件");
t3.value=ANumber;
} 这几个是干什么的?和上面的JS可能是冲突的吧!
我发现问题在,带窗体的会执行
procedure TTestOcx.EventSinkChanged(const EventSink: IUnknown);
begin
FEvents := EventSink as ITestOcxEvents;
inherited EventSinkChanged(EventSink);
end;
这个方法
不带窗体的 不会执行 这是为什么?
然后js创建对象的方法也不一样 不带窗体的用
var myobj=document.getElementById("ocxtype");//方法1
好像没用了,这样就没有了attachEvent方法, 好像也不会走EventSinkChanged这个方法了
而用document.createElement("OBJECT")创建的才是一个DOM对象。
这要如何处理啊
function onBodyLoad()
{
myControl = document.createElement("OBJECT");
document.body.appendChild(myControl);
myControl.codeBase = "myControl.cab";
myControl.classid = "clsid:1ACA02DF-AF52-4371-89B9-B9245BD21831";
myControl.attachEvent("event1", OnEvent1);
}<body onload="onBodyLoad()">
...3. 错误的动态创建方法function onBodyLoad()
{
myControl = new ActiveXObject(myControl.Test);
myControl.attachEvent("event1", OnEvent1);
~~~~~~~~~~~~~~~~~~此时会报告“无此方法”,这是因为
用new ActiveXObject创建的对象并非一个DOM对象,因此不能
调用attachEvent方法。而用document.createElement("OBJECT")
创建的才是一个DOM对象。
}试试这种方法!
function test()
{
myControl = document.createElement("OBJECT");
document.body.appendChild(myControl);
myControl.codeBase = "myControl.cab";
myControl.classid = "C932CEB4-B779-44D8-929C-C9B0CB5D1346";
myControl.attachEvent("OnIncomeTalkEvent", test1);
}也还是没有用 不会执行EventSinkChanged FEvents始终为nil
就是这些方法了。要实在没办法,你就从ActiveX控件里直接调用页面中的JS函数吧,这个例子网有很多,你可以搜索一下!
DLL肯定是可以跨语言的。