-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtext-to-speech.js
76 lines (65 loc) · 2.7 KB
/
text-to-speech.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const TEXT_TO_SPEECH_BUTTON_ELMT = document.getElementById("text-to-speech");
let isSpeaking = false;
// Ajouter un message de débogage pour vérifier que le bouton est bien trouvé
console.log("Bouton trouvé:", TEXT_TO_SPEECH_BUTTON_ELMT);
TEXT_TO_SPEECH_BUTTON_ELMT.addEventListener("click", () => {
console.log("Bouton cliqué");
console.log("État actuel isSpeaking:", isSpeaking);
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
if (!isSpeaking) {
console.log("Démarrage de la lecture");
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
function: startReading
});
isSpeaking = true;
} else {
console.log("Arrêt de la lecture");
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
function: stopReading
});
isSpeaking = false;
}
});
});
function startReading() {
console.log("Fonction startReading appelée");
// Récupérer tout le texte visible de la page
const textContent = Array.from(document.querySelectorAll('h2, h3, h4, h5, h6, p, a, li, td, span, div, html, body, header, th, strong, em, main, article'))
.filter(element => {
const style = window.getComputedStyle(element);
return style.display !== 'none' && style.visibility !== 'hidden' && element.innerText.trim().length > 0;
})
.map(element => element.innerText)
.join(' ');
console.log("Texte à lire:", textContent.substring(0, 100) + "..."); // Log les 100 premiers caractères
if (textContent) {
const utterance = new SpeechSynthesisUtterance(textContent);
utterance.lang = 'fr-FR'; // En français
utterance.rate = 1.0;
utterance.pitch = 1.0;
utterance.onstart = () => console.log("Lecture démarrée");
utterance.onend = () => console.log("Lecture terminée");
utterance.onerror = (e) => console.error("Erreur de lecture:", e);
window.speechSynthesis.cancel(); // Arrêter la lecture
window.speechSynthesis.speak(utterance);
} else {
console.log("Aucun texte trouvé à lire");
alert("Aucun texte à lire sur cette page.");
}
}
function stopReading() {
console.log("Fonction stopReading appelée");
window.speechSynthesis.cancel();
}
window.addEventListener('unload', () => {
if (isSpeaking) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
function: stopReading
});
});
}
});