在Plus.Google.com上触发按键按下事件

6
我正在创建一个扩展程序,需要在用户键入 Google Plus 状态消息的 contenteditable div 上模拟空格键按下事件。
如果您打开 plus.google.com 并点击必须键入消息的 div,您会发现当您在消息中输入链接并按下 {spacebar} 键时,Google 会检索该链接的标题、图片和描述。我已经尝试了三天模拟空格键按下,已经可以模拟表单元素上的 mouseover 事件,可以模拟发送按钮的 click() 事件,但是我仍然无法模拟空格键按下事件。
到目前为止,我最好的代码是:
var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : " ", char : " ", shiftKey : false, keyCode: 32, which: 32, view: window});
//I need to delete the e.keyCode and e.which cause Chrome sets it as a readonly but for some reason if you delete it and assign a new value Chrome accepts (I am very sure this is a serious bug that I discovered in Chrome and that I already reported yesterday in theis bug tracker)
delete e.keyCode;
Object.defineProperty(e, "keyCode", {"value" : 32});
delete e.which;
Object.defineProperty(e, "which", {"value" : 32});

$(".Cla").find(".be.c-B").children().eq(1).get(0).dispatchEvent(e);

非常感谢您。
编辑:
我不知道这是否能帮助您进行测试,但我建议您这样做:
opened_window = window.open("http://plus.google.com");

之后点击div以展开它,然后运行以下代码:

$(".Cla").find(".be.c-B").children().eq(1).html("The site stackoverflow.com is amazing");

var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : " ", char : " ", shiftKey : false, keyCode: 32, which: 32, view: window});
delete e.keyCode;
Object.defineProperty(e, "keyCode", {"value" : 32});
delete e.which;
Object.defineProperty(e, "which", {"value" : 32});

$(".Cla").find(".be.c-B").children().eq(1).get(0).dispatchEvent(e);

由于某种原因,这不会触发链接信息的检索。但是,如果您只是点击div并按下空格键,您将看到Google检索有关该链接的信息。


3
另外,为什么不直接探索触发谷歌的原始功能,而不是尝试通过模拟按键来间接触发它呢? - Robert Harvey
@Robert Harvey 我将事件分配给了一个变量,然后使用eval()执行了该变量,但仍然无法正常工作。我真的尝试了SO中的每种可能的代码。我阅读了很多帖子,已经没有更多的页面可供阅读了。我已经浏览了谷歌结果的第6页,但仍然没有解决方案。 - João Miros
那个 keydown 必须连接到某些代码,可能是 JavaScript。直接触发该代码。 - Robert Harvey
键按下事件是如何触发的? - Robert Harvey
1
我使用了Firebug并跟踪了keydown事件,它触发了6个链接的函数。我在跟踪onkeydown时真的很迷失。实际上,如果有人能告诉我如何检查是哪个函数确切地导致了XHR检索有关URL的信息,那就太好了。 - João Miros
显示剩余4条评论
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接