Używam skryptu zawartości do manipulowania danymi w DOM. Używam document.execCommand ("copy"); powodzeniem na stronie popup.Skrypt Kopiuj/wklej na skrypcie zawartości (rozszerzenie Chrome)
Teraz szukam sposobu, aby zadziałał on w skrypcie treści. Sprawdziłem ograniczenia dla skryptów treści here, ale nie rozumiem, czy kontrola w programie Clipboard jest ograniczona, czy nie. Sprawdziłem również odpowiedzi tutaj - w stackoverflow, ale wydaje się, że większość z nich jest niepewna, a niektóre pochodzą sprzed kilku lat, więc mogły pojawić się zmiany.
Nawet jeśli jest ograniczony, czy możliwe jest obejście tego problemu?
Dziękujemy!
Zamieszczam bieżący skrypt, który mam.
manifest.json
{
"name": "Page action by URL",
"version": "1.0",
"description": "Прибавка за обработка на данните от НБДН.",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"page_action" :
{
"default_icon" : "icon-19.png",
"default_title" : "Приложение за НБД за PHP"
},
"permissions" : [
"clipboardWrite",
"clipboardRead",
"declarativeContent",
"activeTab",
"tabs",
"https://nbd.grao.government.bg/graoappshort/*"
],
"icons" : {
"48" : "icon-48.png",
"128" : "icon-128.png"
},
"manifest_version": 2
}
background.js
chrome.runtime.onInstalled.addListener(function() {
// Replace all rules ...
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
// With a new rule ...
chrome.declarativeContent.onPageChanged.addRules([
{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { urlContains: 'nbd.grao.government.bg/graoappshort/' },
})
],
actions: [ new chrome.declarativeContent.ShowPageAction() ]
}
]);
});
});
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: 'page-editor.js'});
chrome.tabs.insertCSS(null, {file: "style-inject.css"});
});
i funkcji wewnątrz page-editor.js
function(){
var copyFrom = document.createElement("textarea");
copyFrom.textContent = PoleIME.value;
document.body.appendChild(copyFrom);
copyFrom.focus();
document.execCommand('SelectAll');
document.execCommand('Copy');
//document.body.removeChild(copyFrom);
}
Czy możesz potwierdzić, że skrypt jest wstrzykiwany w ogóle? Powinieneś spróbować przekazać 'tab.id' zamiast' null'. – Xan
Co to jest "PoleIME"? Czy jest on zawarty w twoim 'page-editor.js', czy też jest w jego własnym skrypcie? – Xan
Tak, potwierdzam, że skrypt został wstrzyknięty, a DOM został pomyślnie zmanipulowany. PoleIME to pole wejściowe wypełnione danymi. Jest to zawarte w skrypcie. Textarea copyForm został pomyślnie dołączony do treści i został pomyślnie wypełniony i wybrany. Widzę wynik na stronie, ale funkcja kopiowania nie działa. Cały skrypt jest w stanie roboczym, a nie zoptymalizowany i ma 6600 wierszy - dlatego go nie uwzględniłem. –