gnome-shell-extension:在鏡子中工作的 JS 在擴展中不起作用

gnome-shell-extension:在鏡子中工作的 JS 在擴展中不起作用

我有以下程式碼片段(在鏡子中)為我提供了我擁有的聯絡人清單(由 gnome-contacts 管理):

// METHOD 1:
const ContactDisplay = imports.ui.contactDisplay;
let csp = new ContactDisplay.ContactSearchProvider();
let contacts = csp.getInitialResultSet(['']);
contacts.length // 120 contacts

// METHOD 2:
const ContactSystem = Shell.ContactSystem;
let cs = ContactSystem.get_default();
let contacts2 = cs.initial_search(['']);
contacts2.length // 120 contacts

這兩段程式碼(據我所知)是等價的,ContactSearchProviderasgetInitialResultSet基本上initial_search調用ContactSystem.get_default().

然而,當我把這些相同的將一些程式碼寫入 gnome shell 擴充(說出方法enable),並且 Iglobal.log(contacts.length)global.log(contacts2.length),我總是得到0

因此,由於某種原因,這段程式碼可以在鏡子中工作,但是不是在擴展中。為什麼是這樣?執行擴充時聯絡人是否未載入?聯絡人搜尋提供者是否未與我連線?我該如何解決這個問題?

答案1

我在 gnome-shell 郵件列表上詢問了這個問題——事實證明,擴展在本文中很早就加載了,在用戶的聯絡人被正確加載之前。

在檢索聯絡人清單的程式碼片段中新增 5 秒的延遲(讓系統有機會載入所有聯絡人)非常有效。

相關內容