これが単純すぎるように聞こえる場合は、ご容赦ください。
ユーザーがページ内のオブジェクトを右クリックすると、コンテキスト メニューが表示され、クリックされた div-class + の ID を取得するオプションが表示される chrome 拡張機能を作成しています。
私はこれに数日間取り組んでおり、コンテキストメニューに追加のボタンを追加することができました. これらのボタンのいずれかがクリックされると、ページのソースがログに記録されます。それを行うのに時間がかからなかったかもしれませんが、JavaScriptで書くのは初めてで、途中で行き詰まりました。
とにかく、ページの html コード全体は必要ありませんが、クリックされた div クラスが必要です。グーグルで調べたところ、これを行う最善の方法は、純粋なjavascriptの代わりにjqueryの「html」関数を使用することであることがわかりました。問題は、それが私にはうまくいかないことです。
これが私のコードです:
BackgroundPage (ここではすべて正常に動作しているようです)
function genericOnClick(tab)
{
console.log(tab.pageUrl);
chrome.tabs.getSelected(null, function(tab)
{
chrome.tabs.sendMessage(tab.id, {action: "getSource"}, function(source) {
console.log(source);
});
});
}
// Create a parent item and two children.
var parent1 = chrome.contextMenus.create({"title": "Rank Trigger", "contexts":["all"]});
var child1 = chrome.contextMenus.create
(
{"title": "Rank 1", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);
var child2 = chrome.contextMenus.create
(
{"title": "Rank 2", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);
var child3 = chrome.contextMenus.create
(
{"title": "Rank 3", "contexts":["all"], "parentId": parent1, "onclick": genericOnClick}
);
ContentPage: (ここで問題)
chrome.extension.onMessage.addListener(function(request, sender, callback)
{
if (request.action == "getSource")
{
// callback(document.documentElement.outerHTML); //here i can get the page's whole source, I only want the clicked div class
callback($('div class).html(); <--- something wrong here
}
});
マニフェスト ファイル:
{
"name": "x",
"description": "x",
"version": "0.1",
"permissions": ["contextMenus", "tabs"],
"content_scripts":
[
{
"matches": ["http://*/*","https://*/*"],
"js": ["jquery.js", "content.js"],
"run_at": "document_end"
}
],
"background":
{
"scripts": ["background.js"]
},
"manifest_version": 2
}
何か案は?繰り返しになりますが、私の質問は単純に思えますが、これらすべてを独学で学んでおり、何らかの理由で Web プログラミングはアプリケーション プログラミングよりも少し難しいと感じています。
どうもありがとう。
編集: 明確にするために、私が欲しい html ソースはこれです:
<div class="story reviewed-product-story" data-story-id="488481648"....</div>
. この div クラスが必要なので、解析して data-story-id を取得できます。最初に div クラスを取得せずに ID を取得する方法がある場合は、それも機能します (そして、おそらく望ましいこともあります)。
編集: Adeneo のおかげで、ページのソースの最初の div クラスの ID を取得できるようになりましたが、クリックされたものは取得できません。私が持っていたものの一歩前進しましたが、正確には必要なものではありませんでした。$('.story').data('story-id') を使用する前に、クリックされた div のソースを取得する必要があるかもしれません。助言がありますか?