我在浏览器上运行了一个javascript。是否可以在user32.dll中调用函数/方法。
使用pInvoke调用可以从C#中实现。我如何在JavaScript中执行相同操作?
谢谢,
Datte
答案 0 :(得分:12)
由于JavaScript沙箱,如果没有需要提升安全权限的中间层,您就无法做到这一点,例如Netscape风格的浏览器插件(广泛支持),ActiveX控件(几乎只支持IE),或者.Net控制(我认为这是可能的;再次可能只有IE)。在每种情况下,JavaScript都会与控件通信,而控件又会为您调用USER32。
如果没有用户授予您的应用程序提升权限,这些都不会起作用,但我猜你正在要求Windows,这适用于可能的某种内联网应用程序。
答案 1 :(得分:4)
您肯定需要在客户端上安装自己的插件,扩展程序或ActiveX。
对于firefox扩展,您可以使用jsctypes轻松打包电话 如果您使用Firefox 4附带的Jetpack API,它将是所有JavaScript,甚至不需要重新启动浏览器。
以下是来自mozilla.org的基本Hello World的例子:
/* Load JS Ctypes Javascript module */
require("chrome").Cu.import("resource://gre/modules/ctypes.jsm");
/* Load windows api dll */
var lib = ctypes.open("user32.dll");
/* Declare the signature of the function we are going to call */
var msgBox = lib.declare("MessageBoxW",
ctypes.stdcall_abi,
ctypes.int32_t,
ctypes.int32_t,
ctypes.ustring,
ctypes.ustring,
ctypes.int32_t);
var MB_OK = 3;
/* Do it! */
var ret = msgBox(0, "Hello world", "title", MB_OK);
/* Display the returned value */
alert("MessageBox result : "+ret);
lib.close();
答案 2 :(得分:0)
在客户端上 - 出于安全原因这是不可能的(想象每个站点都可以在您的计算机上运行系统命令......世界末日 - 可能使用ActiveX,但这只是IE,但是再一次,DLL只是窗户。)
如果你想在服务器上运行它,你需要通过AJAX和C#。
答案 3 :(得分:0)
使用网页上的javascript在客户端计算机上运行dll方法?这就是触发大灾难的原因。
答案 4 :(得分:0)
如果您使用C#构建自己的Web浏览器,则可以拦截JavaScript调用并将其转换为浏览器中的任何内容。如果您希望其他浏览器可以使用它,那么这将不起作用。
答案 5 :(得分:0)
编写一个包含对user32的调用的com对象。在IE / javascript中调用它。 您的DynamicWrapperX对象适用于此(它将是该com对象,允许您根据需要调用您的dll。)