嘿,我的朋友和我刚接触javascript并遇到一些代码问题。 目前,我们正在尝试制作一个Chrome扩展程序,通过检测击键来检测用户在特定Google文档上工作的时间和内容。
我们当前的方法涉及创建'keypress'事件监听器。我们将其放入在任何docs.google网页上运行的content.js文件中。问题是,当你在页面上编辑标题/其他任何内容时它会起作用,但由于某种原因它在用户实际编辑文档时没有注册。我们在其他网站上尝试过它并且有效,并将其添加到background.js不起作用。
var handler = function (e) {
handler.data.push(e);
console.log("success");
console.log(handler.data);
}
handler.data = [];
window.addEventListener("keydown", handler);
document.addEventListener("keydown", handler);
因此我们尝试更改google docs文档的'iframe'权限,以便我们可以使用内容脚本,但它仍然无效(这里是代码)
var divs = document.getElementsByTagName("iframe");
for(var i = 0; i < divs.length; i++){
divs[i].sandbox = 'allow-scripts'
divs[i].addEventListener('keydown', handler, true);
任何帮助表示赞赏
答案 0 :(得分:2)
我没有看到iframe用于g-docs或g-sheet上的主要内容,但如果你坚持认为你可以在manifest.json内容脚本声明中使用"all_frames": true和"match_about_blank": true来制作它会自动在所有iframe中运行。
另一个想法是在站点看到之前捕获事件:为manifest.json中的内容脚本声明"run_at": "document_start",并使用true
作为addEventListener的useCapture参数:{{1} - 此行应在内容脚本的主代码中执行,以便在构建页面DOM之前注册侦听器,不要将其放在某些document.addEventListener("keydown", handler, true);
或load
回调中。
答案 1 :(得分:1)
我有同样的问题(检测并使用谷歌文档中的按键),该页面给了我解决方案:http://features.jsomers.net/how-i-reverse-engineered-google-docs/
var editingIFrame = $('iframe.docs-texteventtarget-iframe')[0];
if (editingIFrame) {
editingIFrame.contentDocument.addEventListener("keydown", hook, false);
}
function hook(e){
var keyCode = e.keyCode;
console.log("keycode:" + keyCode);
}
希望它可以帮助别人。
答案 2 :(得分:0)
//Hope this may help you !!//
<pre>
var events = document.createEvent('Event');
events.initEvent('keyup',true,true);
var elem = document.querySelector(".docs-texteventtarget-iframe").contentDocument.activeElement;
elem.addEventListener('keyup',function(e){
console.log('check check')
console.log(elem);},false);
elem.dispatchEvent(events);
</pre>