le chrome.onglets renvoie undefined dans le contenu du script
chrome.onglets renvoie undefined malgré le fait que j'définir des tabulations dans les autorisations de bloc.
"permissions": [
"tabs",
"http://*/*",
"https://*/*"
],
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"js/myScript.js"
],
"all_frames": true
}
],
Mais dans myScript.js la suivante renvoie undefined.
chrome.tabs
chrome.tabs
est disponible uniquement pour le code qui s'exécute dans le prolongement du processus, tels que l'arrière-plan, des options ou des popup page. Le contenu des scripts ne peuvent pas accéder à lachrome.tabs
objet.- J'ai google chrome.les onglets à l'intérieur d'une page d'arrière-plan et il n'est pas aussi
- même problème avec moi!
Vous devez vous connecter pour publier un commentaire.
Que le contenu du script, a ses propres limites,
chrome.tabs
n'est disponible que dans le fond des scripts et des popup scripts.Si vous voulez utiliser
chrome.tabs
puis passer le message de content_script à l'arrière-plan de script et de jouer avecchrome.tabs
.chrome.tabs
API...chrome.tabs
est pas défini dans la popup de scripts.debugger
s avantchrome.tabs
les appels dans unbackground
page, et c'est quand je reçoischrome.tabs
êtreundefined
. Lorsque j'exécute ce code, sans interruption, il semble fonctionner correctement (encore une fois, uniquement à l'intérieur de labackground
page)Le contenu des scripts ont qu'un accès limité à google Chrome Api. Cet accès ne comprennent pas les API que vous essayez d'utiliser (par exemple,
chrome.tabs
). Si vous avez besoin d'utiliser l'API, vous devez le faire dans un fond de script1.Énumérés dans google Chrome,des scripts de contenu de la documentation, l'Api disponibles à un contenu de script sont [j'ai placé des méthodes obsolètes dans
barréformat]:Un couple de la liste des Api sont obsolètes et ont été pendant un certain temps. Ceux qui sont obsolètes ont déplacé à différents endroits (également répertorié ci-dessus):
extension.onRequest
➞de l'exécution.onMessage
extension.sendRequest
➞de l'exécution.sendMessage
Alors que ce n'est pas officiellement obsolète,
extension.lastError
est également disponible ende l'exécution.lastError
. À ce stade, il est généralement mentionné à cet endroit:extension.lastError
➞de l'exécution.lastError
Partition de votre extension dans le fond des scripts et des scripts de contenu
Vous allez avoir besoin de séparer votre code sur ce qui doit être à fond dans un script et ce qui doit être dans les scripts de contenu, basée sur les capacités disponibles pour chaque type de script. Le contenu des scripts d'accéder au DOM de la page web dans laquelle ils sont injectés, mais l'accès limité à l'Api d'extension. Fond de scripts aient pleinement accès à l'Api d'extension, mais pas d'accès au contenu de la page web. Vous devriez lire les Extension Chrome aperçu, et les pages accessibles à partir de là, pour avoir une idée de ce que la fonctionnalité devrait être situé dans le type de script.
Il est fréquent d'avoir besoin de communiquer entre vos scripts de contenu et le fond de scripts. Pour ce faire, vous pouvez utiliser la transmission de message. Cela vous permet de communiquer de l'information entre les deux scripts pour accomplir des choses qui ne sont possibles qu'avec un seul type de script.
Par exemple, dans votre contenu de script, vous pouvez avoir besoin de l'information qui est disponible uniquement à partir de l'un de l'autre Api google Chrome, ou si vous avez besoin quelque chose qui peut le plus approprié (ou seulement) être fait par le biais de l'un de l'autre extension Chrome Api. Dans ces cas, vous aurez besoin de envoyer un message à votre arrière-plan le script à l'aide
chrome.moment de l'exécution.sendMessage()
, à dire ce qui doit être fait, tout en fournissant suffisamment de détails pour être en mesure de le faire. Votre fond de script peut ensuite retourner l'information désirée, le cas échéant, à votre le contenu du script. Alternativement, vous aurez des moments où le traitement sera principalement faite dans le contexte de script. L'arrière-plan de script peut injecter un contenu de script, ou tout simplement un message déjà injecté script, pour obtenir des informations à partir d'une page, ou d'apporter des modifications à la page web.background
scripts, cela inclut les popups et les options de pages, etc. Cependant, la seule page que vous pouvez être sûr d'avoir toujours disponible pour recevoir des messages à partir d'un contenu de script sont vos réellesbackground
scripts défini dans manifeste.json. Autres pages peuvent être disponibles à certains moments comme un résultat de l'interaction avec le navigateur, mais ils ne sont pas disponibles de manière cohérente.Cette réponse a été déplacé d'un double question, puis modifié.
chrome.tabs
disponibles. Il est possible d'ouvrir des pages HTML qui sont dans votre poste au sein d'un onglet. La plus courante est les pages d'options, mais vous pouvez avoir d'autres. Ces données seront traitées dans le contexte et ont un onglet associé avec eux, ce qui peut être obtenu à partir dechrome.tabs.getCurrent()
.https://developer.chrome.com/extensions/tabs#method-getSelected montre
Peut-être, vous devez utiliser google chrome.onglets.requête en popup.js comme ce
recharger votre extension et vérifiez le résultat dans l'inspecter l'élément de votre extension.
résultat de l'image
le code de l'image
https://developer.chrome.com/extensions/tabs#type-Tab montre que
L'URL de l'onglet affichage. Cette propriété n'est présent que si l'extension est manifeste comprend les "onglets" autorisation.(Juste pour rappeler quelqu'un a oublié. J'ai été oublié quand je viens de le tester.)
Vérifier cette réponse https://stackoverflow.com/a/6718277/449345
Cette une a fonctionné pour moi