2

当用户单击附加小部件时,我想在加载的页面上实现这一点:

var e = jQuery.Event("keydown", { keyCode: 405 }); 
$("input").trigger(e);

jQuery 已经加载到目标页面中。我试过这个:

var widgets = require("widget");
var tabs = require("tabs");
var pageMod = require("page-mod");

var widget = widgets.Widget({
    id: "button-test",
    label: "button-test",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function() {
        tabs.activeTab.attach({
            contentScript:
                'var e = window.jQuery.Event("keydown", { keyCode: 405 }); $("input").trigger(e);'
        });
    }
});

我在控制台中收到以下错误:

Timestamp: 30/08/2012 14:06:36
Error: An exception occurred.
Traceback (most recent call last):
  File "javascript:var e = window.jQuery.Event("keydown", { keyCode: 405 }); $("input").trigger(e);", line 1, in 
TypeError: window.jQuery is undefined

我需要 postMessage 还是 port.emit()?我也试过 jQuery.event (没有窗口)

4

2 回答 2

1

jQuery 已经加载到目标页面中。

是的,网页可以访问它。但是,出于安全原因,您的内容脚本无法直接访问网页。可以访问 jQuery(以及页面定义的其他 JavaScript 变量),unsafeWindow.jQuery但这具有严重的安全隐患 - 不建议使用。在您的情况下,最好将您自己的 jQuery 副本添加到您的扩展并使用您的内容脚本加载它 - 然后您可以确定 jQuery 在那里并且完全按照您的预期执行:

var {data} = require("self");
tabs.activeTab.attach({
    contentScriptFile: [data.url("jquery.js"), data.url("contentScript.js")]
});
于 2012-08-31T07:55:28.147 回答
0

这对我有用:

var widgets = require("widget");
var tabs = require("tabs");
var data = require("self").data;

var widget = widgets.Widget({
    id: "div-show",
    label: "Show divs",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function() {
        tabs.activeTab.attach({
            contentScriptFile:
                [data.url("jquery-1.8.0.min.js")],
            contentScript: [
                "$(window).keydown(function(e){ \
                console.log(e.keyCode);}); $(window).trigger(jQuery.Event('keydown', { keyCode: 405 })) "]

        });
    }
});

单击小部件图标会生成一个 keydown 事件,然后记录该事件

于 2012-08-31T13:19:46.373 回答