在我的扩展程序中,我获得了第一个标签的文档:
var doc = gBrowser.getBrowserForTab(gBrowser.tabs[0]).contentDocument;
doc包含指向外域的iframe,如何模拟iframe中的图像/对象点击?
实际上,我想实现iMacros'的功能。 X / Y点击。我该怎么办?
答案 0 :(得分:2)
要模拟flash对象中的点击次数,您可能必须使用js-ctypes。
使用javascript找到元素,获取元素screenX和screenY,然后添加DOMWindow的screenX和screenY(窗口可能会调整为更小的窗口并移动),然后使用js-ctypes调用click。
这是在windows中的方法:
Components.utils.import("resource://gre/modules/ctypes.jsm");
var lib = ctypes.open("user32.dll");
var struct_Point = new ctypes.StructType("Point", [
{"x": ctypes.int},
{"y": ctypes.int}
]);
var GetCursorPos = lib.declare('GetCursorPos',
ctypes.winapi_abi,
ctypes.bool,
struct_Point.ptr
);
/* Use it like this */
var point = new struct_Point;
var ret = GetCursorPos(point.address());
Components.utils.reportError(ret);
Components.utils.reportError(point);
这个页面有如何在mac os和linux中做到这一点: https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Standard_OS_Libraries
/*start setcursorpos*/
var SetCursorPos = lib.declare('SetCursorPos', ctypes.winapi_abi, ctypes.bool, ctypes.int, ctypes.int)
function doSetCursorPos() {
var ret = SetCursorPos(10, 10);
}
/*end setcursorpos*/
/*start mouse_event*/
var mouse_event = lib.declare('mouse_event', ctypes.winapi_abi, ctypes.void_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uint32_t, ctypes.uintptr_t);
var MOUSEEVENTF_LEFTDOWN = 2;
var MOUSEEVENTF_LEFTUP = 4;
function domouse_event() {
var ret = mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
var ret = mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
/*end mouse_event*/
然后就是如何使用它。我实际上是在今年4月1日将其作为自动转换器进行了stackoverflow。他们有这个Flash游戏你在巨石上点击70-120次获得独角兽点数。我以为你可以解锁人们锁定我的主题,但事实证明这是骗局。但得到了一些好的ctypes。
像这样使用:
function clickXTimesWhereCursorIs(X, everyMs) {
var point = new struct_lpPoint;
var ret = GetCursorPos(point.address());
Cu.reportError(ret);
Cu.reportError(point);
var ret = SetCursorPos(point.x, point.y);
for (var i=0; i<X; i++) {
setTimeout(function() {
var ret = mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
var ret = mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}, i*everyMs);
}
}
setTimeout(function() {
clickXTimesWhereCursorIs(90, 100);
}, 3000)
答案 1 :(得分:0)
只需获取相关元素的引用并在其上调用.click()
。
E.g。像这样的东西:
var elem = gBrowser.contentDocument.querySelector("a");
elem.click();