Semasa membangunkan sambungan Chrome, anda menghadapi masalah di mana hasil yang diperoleh melalui chrome.tabs.query telah tidak tersedia apabila kod berjalan tanpa titik putus. Untuk menganalisis isu ini, kami akan menyelidiki sifat tak segerak bagi fungsi chrome.tabs.query.
Fungsi tak segerak, seperti chrome.tabs.query, laksanakan kodnya di satu masa kemudian, bebas daripada aliran pelaksanaan utama. Dalam coretan kod anda:
// Initialize an empty array var fourmTabs = new Array(); // Initiate asynchronous `chrome.tabs.query` call chrome.tabs.query({}, function (tabs) { // Iterate over returned tabs for (var i = 0; i < tabs.length; i++) { // Store tabs in array fourmTabs[i] = tabs[i]; } });
Apabila kod ini dijalankan, panggilan chrome.tabs.query melaksanakan dan memulakan permintaan, tetapi pelaksanaan JavaScript diteruskan ke baris seterusnya. Fungsi panggil balik yang disediakan sebagai argumen kedua kepada chrome.tabs.query tidak digunakan serta-merta.
// Print tab URLs (before callback has been called) for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } }
Dalam kod di atas, apabila gelung dilaksanakan, tatasusunan fourmTabs masih kosong kerana fungsi panggil balik mempunyai belum dipanggil. Oleh itu, konsol akan mengeluarkan "??" untuk setiap tab.
Dengan titik putus, pelaksanaan kod dijeda, membenarkan fungsi panggil balik untuk melaksanakan dan mengemas kini tatasusunan fourmTabs. Ini memastikan bahawa gelung kedua mempunyai akses kepada maklumat tab yang dikemas kini dan mencetak URL dengan betul.
Untuk menyelesaikan isu ini dan memastikan bahawa tab tersedia apabila kod berjalan tanpa titik putus, gerakkan gelung kedua di dalam fungsi panggil balik chrome.tabs.query. Ini memastikan bahawa gelung dilaksanakan selepas panggilan balik dipanggil:
// Initialize an empty array var fourmTabs = new Array(); // Initiate asynchronous `chrome.tabs.query` call chrome.tabs.query({}, function (tabs) { // Update `fourmTabs` array for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } // Print tab URLs (after callback has been called) for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } } });
Dengan pengubahsuaian ini, kod akan berjalan dengan betul tanpa memerlukan titik putus, kerana gelung kedua dilaksanakan hanya selepas tatasusunan fourmTabs telah telah dikemas kini oleh fungsi panggil balik.
Atas ialah kandungan terperinci Mengapa Maklumat Tab Sambungan Chrome Saya Kelihatan Kosong Tanpa Titik Putus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!