Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?

Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?

DDD
DDDasal
2024-10-30 01:50:03805semak imbas

Why Does My `chrome.tabs.query` Result Appear Unavailable After Calling?

Sifat Asynchronous chrome.tabs.query: Mengapa Keputusan Kelihatan Tidak Tersedia Selepas Memanggil

Dalam membangunkan sambungan untuk Google Chrome, mendapatkan maklumat tab menggunakan chrome.tabs.query selalunya melibatkan penciptaan tatasusunan (formTabs) untuk menyimpan data tab dan kemudian mengakses kandungannya. Walau bagaimanapun, tingkah laku yang tidak dijangka boleh timbul apabila kod ini tidak dilaraskan dengan betul untuk sifat tak segerak chrome.tabs.query.

Pertimbangkan contoh berikut:

<code class="javascript">var fourmTabs = new Array();
chrome.tabs.query({}, function (tabs) {
  for (var i = 0; i < tabs.length; i++) {
    fourmTabs[i] = tabs[i];
  }
});
for (var i = 0; i < fourmTabs.length; i++) {
  if (fourmTabs[i] != null)
    window.console.log(fourmTabs[i].url);
  else {
    window.console.log("??" + i);
  }
}</code>

Dalam contoh ini, kod cuba mencetak URL setiap tab dalam tatasusunan selepas panggilan balik chrome.tabs.query dilaksanakan. Walau bagaimanapun, apabila dijalankan tanpa titik putus, konsol kekal kosong, manakala menggunakan titik putus menghasilkan hasil yang dijangkakan.

Isu ini timbul kerana chrome.tabs.query ialah fungsi tak segerak, bermakna panggilan baliknya dilaksanakan secara berasingan daripada kod berikutnya . Apabila titik putus digunakan, pelaksanaan kod berhenti seketika pada titik putus pertama, membenarkan panggilan balik selesai sebelum gelung kedua dilaksanakan. Tanpa titik putus, gelung kedua dilaksanakan serta-merta selepas yang pertama, sebelum panggil balik chrome.tabs.query mempunyai masa untuk mengumpulkan data tab. Akibatnya, tatasusunan fourmTabs kosong apabila diakses dalam gelung kedua.

Untuk menyelesaikan isu ini dan memastikan kod beroperasi dengan betul, gelung kedua perlu dipindahkan ke dalam fungsi panggil balik chrome.tabs.query. Dengan cara ini, pelaksanaan gelung kedua dijamin berlaku hanya selepas data tab telah diambil:

<code class="javascript">chrome.tabs.query({}, function (tabs) {
  var fourmTabs = new Array();
  for (var i = 0; i < tabs.length; i++) {
    fourmTabs[i] = tabs[i];
  }
  for (var i = 0; i < fourmTabs.length; i++) {
    if (fourmTabs[i] != null)
      window.console.log(fourmTabs[i].url);
    else {
      window.console.log("??" + i);
    }
  }
});</code>

Atas ialah kandungan terperinci Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn