我試圖做出最簡單的Chrome擴展有史以來,但唉,我有大問題,將不勝感激一些幫助。簡單的高亮文本Chrome擴展
這就是我想做的事情:
我選擇頁面上的一些文字,並按下擴展彈出。當我這樣做時,所選文字的背景顏色會變爲黃色。當我點擊其他地方(並且文本被取消選擇)時,背景顏色被移除。
我如何做到這一點?
我發現這個代碼在這裏:
function makeEditableAndHighlight(colour) {
var range, sel = window.getSelection();
if (sel.rangeCount && sel.getRangeAt) {
range = sel.getRangeAt(0);
}
document.designMode = "on";
if (range) {
sel.removeAllRanges();
sel.addRange(range);
}
// Use HiliteColor since some browsers apply BackColor to the whole block
if (!document.execCommand("HiliteColor", false, colour)) {
document.execCommand("BackColor", false, colour);
}
document.designMode = "off";
}
function highlight(colour) {
var range, sel;
if (window.getSelection) {
// IE9 and non-IE
try {
if (!document.execCommand("BackColor", false, colour)) {
makeEditableAndHighlight(colour);
}
} catch (ex) {
makeEditableAndHighlight(colour)
}
} else if (document.selection && document.selection.createRange) {
// IE <= 8 case
range = document.selection.createRange();
range.execCommand("BackColor", false, colour);
}
}
我真的不知道如何工作的background.js和popup.js和context_script.js。
我試着把這段代碼放在popup.js中,並用highlight('yellow')
調用它,但它沒有起作用。我也嘗試將這段代碼放在background.js中,並使用chrome.extension.getBackgroundPage().highlight('yellow');
從popup.js中調用它,但它不起作用。
在任何情況下,即使此代碼正常工作,它也會更改所選文本的背景顏色,但在取消選定文本時不會將其刪除。
在任何情況下,只要讓這第一點工作將是一個很大的幫助。
在其當前形式中,代碼的工作原理是這樣的:http://jsfiddle.net/LPnN2/12/ 問題是讓它與擴展一起工作。
這是我的manifest.json:
{
"background": {
"scripts": [ "readit.js"]
},
"description": "Reads out selected text",
"icons": {
"128": "icon128.png",
"16": "icon16.png",
"48": "icon48.png"
},
"browser_action": {
"default_icon": "icon48.png",
"default_popup": "popup.html"
},
"content_scripts": [ {
"js": [ "inject.js" ],
"matches": [ "\u003Call_urls\u003E", "https://*/*" ]
} ],
"manifest_version": 2,
"name": "Speak Me",
"options_page": "options.html",
"permissions": [ "contextMenus", "tabs", "notifications", "background" ],
"update_url": "http://clients2.google.com/service/update2/crx",
"version": "0.1"
}
我已經擴展做別的事情(使用TTS通過API來讀出聲來選定的文本,但會喜歡的文字也其突出顯示,因此我試圖實現這一點)。
我試着接近你的解決方案,但它並沒有真正的工作。我懷疑這可能是因爲'chrome.browserAction.onClicked.addListener'不起作用,如果彈出窗口也打開一個對話框。我將如何解決這個問題? – user2651560
不知道我以前的評論。我學會了如何通過使用popup.js中的getBackgroundPage來調用background.js中的函數。後臺功能只是一個基本功能,它向content.js發送一條消息 - 在收到該消息後,content.js將執行高亮功能。完善。但是,既然你真的很有幫助,那麼現在我必須要求你提供一個線程,讓我在取消選擇後使它不被選中。有沒有辦法以某種方式恢復原來的,還是我需要寫一個新的JS功能,並執行一個呢?如何僅在取消時選擇時間? – user2651560
我在content.js中做了這個:function body(){ document.getElementsByTagName(「body」)[0] .addEventListener( 「click」, function(event){ highlight('white'); } ); }'問題是這樣的...有點奇怪。它只在你特別點擊選擇時才起作用,因爲如果你在外面點擊它,就不會有選擇,因此沒有什麼可以用'highlight'('white')'來改變。 – user2651560