すべての段落(タグコンテンツ)を取り込んで、各単語をボタンに入れるGoogle Chrome拡張機能を開発しています。それは私が取り組んでいる大きなプログラムの一部です。私はJSFiddleにアプリのその部分の作業コピーを持っています。ウェブページの段落の各単語をそのテキストを含むボタンに置き換えます。
ここで、そのコードをChrome拡張機能に移植しようとしています。しかし、私は自分のバックグラウンドスクリプトからDOMにアクセスすることができないので、私のコードでそれを操作することができます(私の関数では)。私はまだ機能を呼び出すことさえしていません。なぜなら、最初にDOMを編集するはずがないから、のbackground.jsの中で私は理解できないからです。ここで
は私のコードです:
manifest.jsonを
{
"manifest_version": 2,
"name": "Test Extension",
"version": "1",
"background": {
"persistent": false,
"scripts": ["background.js","jquery-3.0.0.min.js","TextSplitter.js"]
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content.js"]
}],
"browser_action": {
"default_title": "Test Extension"
},
"permissions": ["activeTab","tabs"]
}
content.js
// Listen for messages
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
// If the received message has the expected format...
if (msg.text === 'report_back') {
// Call the specified callback, passing
// the web-page's DOM content as argument
sendResponse(document);
}
});
background.js
// A function to use as callback
function doStuffWithDom(domContent) {
console.log('I received the following DOM content:\n');
console.log(JSON.stringify(domContent));
var domAccess = $(domContent);
var myText = $(domAccess).find("p").text();
console.log("THIS IS MY TEXT: " + myText);
}
chrome.tabs.onUpdated.addListener(function (tabID, info, tab) {
console.log("Status: " + info.status);
if (info.status == "complete") {
chrome.tabs.sendMessage(tab.id, { text: 'report_back' }, doStuffWithDom);
}
});
TextSplitter.js
function FormatText(domObject) {
var pElements = []; // Holds the split paragraphs for each p tag
var pElementIndex = 0;
//Loop through each p tag in web page
$("p").each(function (webPElementIndex, webPElement) {
var jQObjWebPElement = $(webPElement);// Convert p element to jQuery Obj
// split current paragraph element text into an array of seperate words
pElements[webPElementIndex] = jQObjWebPElement.text().split(" ");
});
//Clear text out of all p elements
$("p").empty();
//Loop through p elements in the webpage to add back text with spans around each word
$("p").each(function (webPElementIndex, webPElement) {
// convert current web page element to jQuery Obj
var jQObjWebPElement = $(webPElement);
// Loop through each word stored in each stored paragraph element
$.each(pElements[pElementIndex], function (pElementWordIndex, pElementWord) {
var jQObjPElementWord = $(pElementWord); // convert element to jQuery object
jQObjWebPElement.append($("<button>")
.text(pElements[pElementIndex][pElementWordIndex]));
});
pElementIndex = pElementIndex + 1;
});
}
私は特にChromeの拡張機能では、一般的にはDOMでの作業に非常に新しいですと自分の無知をご容赦ください。
[extensions overview](https://developer.chrome.com/extensions/overview#arch)を参照してください:コンテンツスクリプトが必要です。 – wOxxOm
バックグラウンドスクリプトを削除し、機能をコンテンツスクリプトに移動します。あなたのバックグラウンドスクリプトはDOMに直接アクセスできないので、コンテンツスクリプトでHTMLの処理と変更を行う必要があります。メッセージングパス不要 – nick