问题描述
所以我试图在 GNOME 扩展中调用谷歌 API,我想知道为什么如果我尝试启用我的扩展它会导致 manjaro Linux 崩溃。如果我在做一些根本错误的事情,请通知我,因为我对此很陌生,即使我已经编程多年。 好的,我在下面添加我的代码。
const Main = imports.ui.main;
const {St,clutter} = imports.gi;
const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Mainloop = imports.mainloop;
let myPopup;
let panelButton;
const MyPopup = GObject.registerClass(
class MyPopup extends PanelMenu.Button {
_init () {
// let icon = new St.Icon({
// //icon_name : 'security-low-symbolic',// gicon : Gio.icon_new_for_string( Me.dir.get_path() + '/icon.svg' ),// style_class : 'system-status-icon',// });
// this.add_child(icon);
let panelButtonText = new St.Label({
text : "Youtube Channel",y_align: clutter.ActorAlign.CENTER,});
this.add_child(panelButtonText);
let pmItem = new PopupMenu.PopupMenuItem('normal Menu Item');
pmItem.add_child(new St.Label({text : 'Label added to the end'}));
this.menu.addMenuItem(pmItem);
pmItem.connect('activate',() => {
log('clicked');
});
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addMenuItem(
new PopupMenu.PopupMenuItem(
"User cannot click on this item",{reactive : false},)
);
this.menu.connect('open-state-changed',(menu,open) => {
if (open) {
log('opened');
} else {
log('closed');
}
});
// sub menu
let subItem = new PopupMenu.PopupSubMenuMenuItem('sub menu item');
this.menu.addMenuItem(subItem);
subItem.menu.addMenuItem(new PopupMenu.PopupMenuItem('item 1'));
subItem.menu.addMenuItem(new PopupMenu.PopupMenuItem('item 2'),0);
// section
let popupMenuSection = new PopupMenu.PopupMenuSection();
popupMenuSection.actor.add_child(new PopupMenu.PopupMenuItem('section'));
this.menu.addMenuItem(popupMenuSection);
// image item
let popupImageMenuItem = new PopupMenu.PopupImageMenuItem(
'Menu Item with Icon','security-high-symbolic',);
this.menu.addMenuItem(popupImageMenuItem);
// you can close,open and toggle the menu with
// this.menu.close();
// this.menu.open();
// this.menu.toggle();
}
load_json_async(url,params,fun) {
if (_httpSession === undefined) {
_httpSession = new Soup.Session();
_httpSession.user_agent = this.user_agent;
} else {
// abort prevIoUs requests.
_httpSession.abort();
}
let message = Soup.form_request_new_from_hash('GET',url,params);
_httpSession.queue_message(message,Lang.bind(this,function(_httpSession,message) {
try {
if (!message.response_body.data) {
fun.call(this,0);
return;
}
let jp = JSON.parse(message.response_body.data);
fun.call(this,jp);
} catch (e) {
fun.call(this,0);
return;
}
}));
return;
}
// main() {
// var loop = new MainLoop();
// var time = new TimeoutSource(2000);
// time.set_callback(() => {
// stdout.printf("Time!\n");
// loop.quit();
// return false;
// });
// time.attach(loop.get_context());
// loop.run();
// }
});
const MyIcon = GObject.registerClass(
class MyIcon extends PanelMenu.Button {
_init () {
super._init(0);
let icon = new St.Icon({
//icon_name : 'security-low-symbolic',gicon : Gio.icon_new_for_string( Me.dir.get_path() + '/icon.svg' ),style_class : 'system-status-icon',});
this.add_child(icon);
}
});
function init() {
log("started init")
// Mainloop.timeout_add(1000,() =>{
// log("one second later!")
// // load_json_async("https://www.googleapis.com/youtube/v3/channels?part=statistics&id=",{},function(json){
// // log(data)
// // });
// });
}
function enable() {
myPopup = new MyPopup();
log("started here")
Main.panel.addToStatusArea('myPopup',myPopup,0);
// const https = require('https');
// log("started pulling data")
// let timeout = Mainloop.timeout_add_seconds(10,() => {
// https.get('https://www.googleapis.com/youtube/v3/channels?part=s',(resp) => {
// let data = '';
// // A chunk of data has been received.
// resp.on('data',(chunk) => {
// data += chunk;
// });
// // The whole response has been received. Print out the result.
// resp.on('end',() => {
// log(JSON.parse(data).explanation);
// });
// }).on("error",(err) => {
// log("Error: " + err.message);
// });
// });
// myIcon = new MyIcon();
// log("started here")
// Main.panel.addToStatusArea('myIcon',myIcon,-1);
}
function disable() {
myPopup.destroy();
}
我尝试了几种方法来做到这一点,但我想知道我做错了什么。 非常感谢你们。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)