Rumah > Soal Jawab > teks badan
Saya sedang menulis sambungan Chrome dan cuba menindih Apabila saya mengakses kaedah Adakah saya perlu menggunakan pemesejan antara background.html dan popup.html untuk mengakses DOM halaman web? Saya ingin melakukan semuanya dalam popup.html dan juga menggunakan jQuery jika boleh. P粉2960800762023-10-19 08:17:05 Beberapa contoh menggunakan suntikan program untuk menambah skrip pop timbul yang berkembang pada div ini. Jangan lupa untuk menambah kebenaran dalam manifest.json, lihat jawapan lain untuk mendapatkan maklumat lanjut. Panggilan ringkas: Nota: Dalam Chrome 91 atau lebih awal, Panggil dengan parameter dan terima keputusan Memerlukan Chrome 92 semasa ia melaksanakan Contoh 1: Contoh 2: Panggilan ringkas: Panggil dengan parameter dan terima keputusan: Contoh ini menggunakan fungsi P粉6004020852023-10-19 00:39:30 Masalah: Halaman sambungan (pop timbul, pilihan, halaman latar belakang dalam MV2, dll.) diasingkan daripada halaman web, mereka mempunyai DOM sendiri, Penyelesaian: Gunakan Skrip Kandungan untuk mengakses halaman web atau berinteraksi dengan kandungannya. manifest.json: Ia akan berjalan sekali apabila halaman dimuatkan. Selepas itu, gunakan Mesej. Amaran! Ia tidak boleh menghantar elemen DOM, Peta, Set, ArrayBuffers, kelas, fungsi, dsb. Ia hanya boleh menghantar objek dan jenis ringkas yang serasi dengan JSON, jadi anda perlu mengekstrak data yang diperlukan secara manual dan menghantarnya sebagai tatasusunan atau objek mudah. ManifestV3: Dalam skrip sambungan (seperti tetingkap pop timbul), skrip/fungsi kandungan boleh disuntik ke dalam tab mengikut keperluan. Hasil kaedah ini ialah ungkapan terakhir dalam skrip kandungan dan oleh itu boleh digunakan untuk mengekstrak data. Data mestilah serasi dengan JSON, lihat amaran di atas. dalam Jika ideal tidak mungkin, tambahkan tapak yang dibenarkan pada Perbezaan antara ManifestV2 dan di atas: document.body.insertBefore
daripada popup.html, ia akan menimpa document.body.insertBefore
方法时,它会覆盖弹出窗口上的 membalas semua(2)saya akan balas
Manifest V3
(async () => {
const [tab] = await chrome.tabs.query({active: true, currentWindow: true});
await chrome.scripting.executeScript({
target: {tabId: tab.id},
func: inContent1,
});
})();
// executeScript runs this code inside the tab
function inContent1() {
const el = document.createElement('div');
el.style.cssText = 'position:fixed; top:0; left:0; right:0; background:red';
el.textContent = 'DIV';
document.body.appendChild(el);
}
func:
应为 function:
. args
. res = await chrome.scripting.executeScript({
target: {tabId: tab.id},
func: (a, b) => { return [window[a], window[b]]; },
args: ['foo', 'bar'],
});
(async () => {
const [tab] = await chrome.tabs.query({active: true, currentWindow: true});
let res;
try {
res = await chrome.scripting.executeScript({
target: {tabId: tab.id},
func: inContent2,
args: [{ foo: 'bar' }], // arguments must be JSON-serializable
});
} catch (e) {
console.warn(e.message || e);
return;
}
// res[0] contains results for the main page of the tab
document.body.textContent = JSON.stringify(res[0].result);
})();
// executeScript runs this code inside the tab
function inContent2(params) {
const el = document.createElement('div');
el.style.cssText = 'position:fixed; top:0; left:0; right:0; background:red';
el.textContent = params.foo;
document.body.appendChild(el);
return {
success: true,
html: document.body.innerHTML,
};
}
Senarai V2
// uses inContent1 from ManifestV3 example above
chrome.tabs.executeScript({ code: `(${ inContent1 })()` });
// uses inContent2 from ManifestV3 example above
chrome.tabs.executeScript({
code: `(${ inContent2 })(${ JSON.stringify({ foo: 'bar' }) })`
}, ([result] = []) => {
if (!chrome.runtime.lastError) {
console.log(result); // shown in devtools of the popup window
}
});
inContent
untuk menukar kod secara automatik kepada rentetan, faedahnya ialah IDE boleh menggunakan penyerlahan sintaks dan linting. Kelemahan yang jelas ialah penyemak imbas membuang masa menghuraikan kod, tetapi biasanya kurang daripada 1 milisaat jadi ia boleh diabaikan. document
、< code>window 和 chrome-extension://
URL.
Kaedah 1. Deklaratif
"content_scripts": [{
"matches": ["*://*.example.com/*"],
"js": ["contentScript.js"]
}],
Kaedah 2. Pengaturcaraan
权限
manifest.json:
“脚本”
- wajib "activeTab"
- Senario yang ideal, sesuai untuk bertindak balas kepada tindakan pengguna (biasanya mengklik ikon sambungan dalam bar alat). Jangan tunjukkan sebarang amaran kebenaran semasa memasang sambungan. host_permissions
dalam manifes.json:
“*://*.example.com/”
dan mana-mana laman web lain yang anda mahukan. "
或 "*://*/"
Ini akan meletakkan sambungan anda dalam baris gilir semakan yang sangat perlahan dalam Kedai Web Chrome kerana kebenaran hos yang luas.
权限
.