高级问题
谷歌日历中的“其他日历”没有取消全选。我们公司有很多员工,我在安排会议时会不断添加和删除用户。我意识到有一个“查找时间”功能,但除了那个论点之外,我想让它工作,因为我觉得它很有趣。
解决方案
创建一个页面操作 chrome 扩展,当标签位于 Google 日历网站上时,该扩展会出现。单击页面操作图标应通过模拟 mousedown 事件自动取消选择所有日历。
执行
除了实际取消选择日历外,页面操作正常运行。
我使用 Google Developer 工具查看当我手动取消选择时触发哪些事件,以及查看哪些元素注册了处理程序。密钥对似乎是document
元素和mousedown
事件。因此,我想自动调度事件以复制行为。我一开始直接在 div 上进行调度,假设它会冒泡,但是当它不起作用时,我看到唯一的事件侦听器在文档上,我试图直接在那里引发事件。
在contentscript.js
单击页面操作时执行以下方法:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
// Get the div containing other calendars
var otherCalendars = document.getElementById("calendars_fav");
// Get all divs representing a single selected calendar
var selectedOtherCalendars = otherCalendars.getElementsByClassName("calListLabel-sel");
for (var i=0 ; i < selectedOtherCalendars.length; i++) {
// Get the span which contains the name of the calendar e.g. Contact's birthdays
var c = selectedOtherCalendars[i].children[1];
var name = c.innerHTML;
// Find the location of this element relative to the document
var x = getOffsetLeft(c) + (c.offsetWidth / 2);
var y = getOffsetTop(c) + (c.offsetHeight / 2);
console.log('mousedown on document targeting ' + name + ' x:' + x + ', y:' + y);
// See http://goo.gl/WtlWpv
simulate(document, "mousedown", { pointerX: x, pointerY: y });
}
});
SO:如何使用Javascript模拟鼠标点击?- 我从这里解除了模拟实现
问题
日志看起来是正确的,没有错误,但什么也没有发生,模拟似乎失败了。
- 当我以编程方式调度事件时,Chrome 开发人员工具时间轴中没有出现任何事件
- 由于分派,没有执行 Google Calendar javascript
示例日志条目:
mousedown on body targeting Ipswich Town x:85.5, y:494
标题说明
我不知道 dispatchEvent 是否可以在其他地方的谷歌日历上工作,我只从我的 chrome 扩展中尝试过contentscript.js
。