0

J'ai construit un petit WebExtension pour Firefox (52.2.1 32-Bit) principalement basé sur un example provided by the Mozilla Developers Network. C'est un ContextMenu qui permet à l'utilisateur de copier plusieurs textes (en sélectionnant le texte correspondant puis en choisissant l'un des boutons dans le menu contextuel) et de les combiner finalement (d'une certaine manière) dans le presse-papiers pour une utilisation ultérieure.Firefox WebExtension: selectionText dans contextMenus ne retourne que 150 caractères

L'extension a très bien fonctionné mais maintenant les textes sélectionnés individuellement et copiés sont soudainement limités à 150 caractères, tout ce qui a été sélectionné en plus est coupé. Qu'est-ce qui pourrait causer ce comportement? Jusqu'à présent, je n'ai trouvé aucune documentation ou forum indiquant que selectionText ne stocke que 150 caractères.

Voici comment le texte sélectionné est copié dans une variable locale:

browser.contextMenus.onClicked.addListener(function(info, tab) { 
    if (info.menuItemId == "save-title") { 
    title = info.selectionText; 
    } 
}); 

Le reste du code est essentiellement identique à l'exemple lié ci-dessus:

browser.contextMenus.onClicked.addListener(function(info, tab) { 
    if (info.menuItemId == "export-to-clipboard") { 
    const content = title + "\t" + date + "\t" + author + "\t\t" + abstract; 

    const code = "copyToClipboard(" + 
     JSON.stringify(content) + ");"; 

    browser.tabs.executeScript({ 
     code: "typeof copyToClipboard === 'function';", 
    }).then(function(results) { 
     // The content script's last expression will be true if the function 
     // has been defined. If this is not the case, then we need to run 
     // clipboard-helper.js to define function copyToClipboard. 
     if (!results || results[0] !== true) { 
      return browser.tabs.executeScript(tab.id, { 
       file: "clipboard-helper.js", 
      }); 
     } 
    }).then(function() { 
     return browser.tabs.executeScript(tab.id, { 
      code, 
     }); 
    }).catch(function(error) { 
     // This could happen if the extension is not allowed to run code in 
     // the page, for example if the tab is a privileged page. 
     console.error("Failed to copy text: " + error); 
    }); 
    title = ""; 
    date = ""; 
    author = ""; 
    abstract = ""; 
    } 
}); 

Et, afin de inclure tout ici, le presse-papiers-helper.js:

/* Copy-paste from https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js */ 

// This function must be called in a visible page, such as a browserAction popup 
// or a content script. Calling it in a background page has no effect! 
function copyToClipboard(text) { 
    function oncopy(event) { 
     document.removeEventListener("copy", oncopy, true); 
     // Hide the event from the page to prevent tampering. 
     event.stopImmediatePropagation(); 

     // Overwrite the clipboard content. 
     event.preventDefault(); 
     event.clipboardData.setData("text/plain", text); 
    } 
    document.addEventListener("copy", oncopy, true); 

    // Requires the clipboardWrite permission, or a user gesture: 
    document.execCommand("copy"); 
} 
+0

Est-ce quelque chose qui a changé entre les différentes versions de Firefox? – Makyen

+0

@Makyen Je ne travaillais pas avec la webextension moi-même, donc c'est un peu difficile à suivre, mais oui, je le pense. Utiliser Firefox ESR a peut-être confondu la version avec laquelle il a changé plus loin ... Mais je pense que vous pouvez le suivre assez facilement quand vous [regardez le fil] (https://bugzilla.mozilla.org/show_bug.cgi ? id = 1338898) Andrew Swan posté dans sa réponse. – Syrill

Répondre