如果在控制台本身中运行以下代码字:
var $inputbox = $('input#inputfield');
var SPACE_KEYCODE = 32;
var space_down = $.Event( 'keyup', { which: SPACE_KEYCODE } );
$inputbox.trigger(space_down)
我可以看到事件被触发和页面响应。
但是,当通过Chrome扩展程序在内容脚本中运行相同的代码时,它会无声地失败。记录'$ inputbox.trigger(space_down)'的结果表明它正确返回元素。
这里的目的是让现有页面JS响应来自扩展的键盘事件。这可能吗?
答案 0 :(得分:1)
虽然我无法找到有关内容脚本JS'world'和源站点世界之间事件是否不同的文档,但我在内容脚本中进行了以下操作以将一些JS加载到window.location中,它运行在原始网站的内容中。
// In order to send keyboard events, we'll need to send them from the page's JS
var load_into_page_context = function(file) {
var file_url = chrome.extension.getURL(file);
$.get(file_url, function(script_contents) {
window.location = 'javascript:'+script_contents
})
}
load_into_page_context("injectme.js");
这会将injectme.js(与扩展名捆绑在一起)加载到window.location中,并使生成的键盘事件激活原始站点的事件处理程序。