2017-02-16 2 views
-1

Ein kleines Problem beim Versuch, eine Chrome-Erweiterung zu entwickeln. Das Ziel ist einfach und ich weiß, dass es bereits einen Beitrag in der Sache gibt, aber was auch immer ich fand, funktionierte nicht für mich. Es fühlt sich an, als ob das, was in einem normalen Skript (html/js) funktioniert, nicht innerhalb der Chrome-Erweiterung funktioniert.JS - Chrome Extension - Auswahl erhalten

Ich versuche, eine einfache Erweiterung zu machen, die beim Klicken auf ihr Symbol die Auswahl (mindestens Text, wenn möglich mehr Informationen) bekommen wird, aber irgendwie funktioniert es nicht. Ich bekomme eine Auswahl, aber es ist mit einer leeren Auswahl.

Hier ist der Code. manifest.json

{ 
    "manifest_version": 2, 

    "name": "Paster", 
    "description": "Bla", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "camera.png", 
    "default_title": "Bla" 
    }, 

    "background": { 
    "page": "background.html" 
    }, 

    "permissions": [ 
    "tabs", 
    "activeTab", 
    "https://ajax.googleapis.com/", 
    "clipboardRead", 
    "clipboardWrite" 
    ] 
} 

background.html

<textarea id="temp_textarea_draft_paster"></textarea> 
<div>BLA BLA BLA</div> 
<script src="jquery-3.1.1.min.js"></script> 
<script src="background.js"></script> 

background.js

chrome.browserAction.onClicked.addListener(function() { 
    getSelectionText() 
}); 

getSelectionText = function (info, tab) { 
    selection = window.getSelection(); 
    console.log(selection); 
    alert('yeah' + selection); 
}; 

Wenn ich die dev-Konsole von background.html öffnen erhalte ich die console.log aber mit einem leere Auswahl, was auch immer ich ausgewählt habe. Die Warnung erscheint auch, aber nur mit "Ja".

Wenn ich auf die Chrome-Erweiterungen: //ext-id/background.html Seite gehe und einen Text dort auswähle und auf den Knopf klicke, funktioniert es mit einer Auswahl einschließlich seiner Daten ... Wie kommt es? Es fühlt sich an, als würde die Erweiterung die Auswahl nicht von den Tabs bekommen, nur von der Seite background.html.

+1

Verweisen Sie diese http://stackoverflow.com/questions/12424631/get-selected-text-in-a-chrome-extension es wird mit 'chrome contextMenu api' implementiert – nivas

+1

Lesen Sie die Dokumente. https://developer.chrome.com/extensions/overview#arch –

+0

Ich würde vorschlagen, dass Sie die [Chrome Erweiterung Übersicht] (https://developer.chrome.com/extensions/overview) (und vielleicht zusammen mit den Seiten) lesen verlinkt aus der Übersicht) Der [Architekturbereich] (https://developer.ch rome.com/extensions/overview#arch) enthält allgemeine Informationen zur Architektur, die Ihnen helfen sollen, zu verstehen, wie die Dinge im Allgemeinen organisiert/durchgeführt werden. Sie werden wahrscheinlich auch [Content Scripts] (https://developer.chrome.com/extensions/content_scripts) und [Message Passing] (https://developer.chrome.com/extensions/messaging) lesen. – Makyen

Antwort

1

Ich fand die Lösung nach ziemlich viel Forschung. Ja das Lesen der Dokumentation (wieder) wie vorgeschlagen geholfen, aber ich denke immer noch, dass es nicht zu deutlich erklärt wird. Wenn jedoch jemand das gleiche Problem hat, muss es verstanden werden, dass background.js nur mit background.html verlinkt ist, aber nicht mit dem Inhalt der Seite, die auf der aktiven Registerkarte angezeigt wurde.

Im Gegensatz dazu wird das Inhaltsskript innerhalb der aktiven Seite 'hinzugefügt' oder 'angewendet' und kann daher Funktionen wie die window.getSelection() verwenden.

Schritte sind wie folgt:

In manifest.json zu content_scripts beziehen, die Sie innerhalb der aktiven Seite sowie auf den entsprechenden „matches“ ‚‘ eingesetzt werden. (welche Seite es betrifft, zB "".

Ihre Hintergrundseite kann dann eine Nachricht (https://developer.chrome.com/extensions/messaging) an das Inhaltsskript senden, wenn die Browseraktion ausgelöst wird (klicken Sie auf das Symbol) und das Inhaltsskript wird diese Nachricht abhören und antworten Sie mit den getSelection Ergebnissen.

Verwandte Themen