1

最近我开始使用 GNOME 扩展开发。通过gnome-shell-extension-tool --create-extension在终端中执行,我创建了 hello world 扩展,但是当我更改代码以构建类似扩展的弹出窗口时,我收到此错误在此处输入图像描述

我正在使用的 JS 代码是

const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Main = imports.ui.main;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Gettext = imports.gettext;
const MessageTray = imports.ui.messageTray;

const _ = Gettext.gettext;

function _myButton() {
    this._init();
}

_myButton.prototype = {
    __proto__: PanelMenu.Button.prototype,

    _init: function() {
        PanelMenu.Button.prototype._init.call(this, 0.0);
        this._label = new St.Label({ style_class: 'panel-label', text: _("HelloWorld Button") });
        this.actor.set_child(this._label);
        Main.panel._centerBox.add(this.actor, { y_fill: true });

        this._myMenu = new PopupMenu.PopupMenuItem(_('HelloWorld MenuItem'));
        this.menu.addMenuItem(this._myMenu);
        this._myMenu.connect('activate', Lang.bind(this, _showHello));
    },

    _onDestroy: function() {}
};

function _showHello() {

    let text = new St.Label({ style_class: 'helloworld-label', text: _("Hello, world!") });
    let monitor = global.get_primary_monitor();

    global.stage.add_actor(text);
    text.set_position(Math.floor (monitor.width / 2 - text.width / 2),
                      Math.floor(monitor.height / 2 - text.height / 2));

    Mainloop.timeout_add(3000, function () { text.destroy(); });
}


function main(extensionMeta) {

    let userExtensionLocalePath = extensionMeta.path + '/locale';
    Gettext.bindtextdomain("helloworld", userExtensionLocalePath);
    Gettext.textdomain("helloworld");

    let _myPanelButton = new _myButton();
}

谁能告诉我为什么我会收到这个错误。我正在使用带有 GNOME Shell 3.10.2.1 的 Fedora 20

4

1 回答 1

2

您缺少 中的enable()disable()功能extension.js。这两个是强制性的:enable()是加载扩展后的入口点(而不是main());并disable()在 gnome-tweak-tool 中停用后调用。这些基本功能必须存在于所有扩展中,包括您提到的“Hello World”示例。

Gnome Shell 文档稀缺且不足。我猜您的代码基于非常古老的准则,因为该main()功能自 3.2 以来已被弃用。阅读这些参考资料:1 , 2

于 2014-08-14T04:45:17.660 回答