求助chrome浏览器js调用japple程序的方法报is not a function错误,同样的代码ie没问题。

求助chrome浏览器js调用japple程序的方法报is not a function错误,同样的代码ie没问题。,第1张

这闹友是chrome的兼容性问题,

is not a function

说明里面的函数定义有问题。

chrome里面的API与IE,除了厂链橘商名前缀外,还有很多不一样的棚弯团地方,

要重写相应代码。

一般情况下,浏览器中是无法直接和本机的其他的程序进行交互的,在IE中,我们可以通过ActiveX对象的方式进行。但是这个方式只适用于IE浏览器,另一种比较通用的方式便是URL协议的方式,我们将某种URL的协议注册给某个程序来进行处理,比如将tencent://这样的协议注册给QQ程序来进行处理,当浏览器需要访问这样的协议的时候就转给QQ程序进行处理。这种URL协议的方式是可以跨平台的,比如在Windows上你需要添加注册表项。

首先先看看js应该如何调用qq客户端。

window .open(" tencent://message/?uin=346915968 ")

window.open顾名思义,打开。Tencent就不用多说了吧 BAT之T。上述能直接打开qq帐则做号对应的对话框。由此可以知道网页上的在线客服功能是如何实现了吧。

那要是不需要打开对话框,就想要登陆qq应该如何实现呢肢茄?很简单呀:

window .open(" tencent://message/?uin=qq ") 不过调用应用这种跟黑客没什么差别的行为,浏览器一般都是禁止的,

选择允许后,

启动应用,qq客户端就会被调起。

为什么说这个呢,老板又给了个需求孙饥衡,想让调起qq客户端一样,想通过演示页面的一个按钮,调起售票系统的各种程序...

什么都不说了,先看看什么是自定义协议。

Pluggable Protocol,又叫URL Protocol,有时会叫Shell命令,通用的Protocol有http、ftp、mailto等,这些都是windows安装时自带的协议。

接着也实现一个简单的自己的自定义协议吧。

1,运行window,输入regedit打开注册表。 在HKEY_CLASSES_ROOT下面建一个自己起的名字的表。

用如下格式把各项值添上:

js打开qq音乐.exe

启动应用

end.

ActiveX控件调用JavaScript函数的方法

1.向ActiveX注册JS函数:

在ActiveX中添加接口方法 - void RegisterFunction(BSTR bstrFuncName, IDispatch* dispFunc)

JavaScript代念弯码声明一个函数,并调用RegisterFunction接口向ActiveX注册该函数,供ActiveX调用。

2.保存注册的函数,ActiveX使用CComDispatchDriver对象保存注册的JS函数(IDispatch接口指针)

CComDispatchDriver m_Func1

void RegisterFunction(BSTR bstrFuncName, IDispatch* dispFunc)

{

if (bstrFuncName == "1")

m_Func1 = dispFunc

}

3.调戚运用注册的函数仔仔闷,ActiveX使用CComDispatchDriver::InvokeN函数调用注册的函数

以下是对接受一个无符号整型参数的JS函数的调用:

VARIANT varArg[1]

varArg[0].vt = VT_UINTvarArg[0].uintVal = 1

try{

m_Func1.InvokeN((DISPID)DISPID_VALUE, varArg, 1)

}

catch(...){}

4.注意,对JS函数的调用必须在ActiveX程序的主线程中执行!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12430714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存