現在Chrome拡張アプリでwebページの要素をpopup.htmlのボタンで指定して
その対象をMutationObserverで監視して変更されたテキストデータを取得→拡張アプリへ再伝達するものを作成中です。
大まかな動きのものは出来たのですが、監視対象を切り替える度に
MutationObserverのイベントの切り替えで詰まっています。
監視対象の切り替えの挙動は成功しているのですが、その度に過去の対象も含めて監視状態が増えてしまう(newで生成してるので当たり前なのですが・・・)
できれば切り替え時に現在動作しているobserverを取得して、もし稼働中のMutationObserverイベントを停止 observer.disconnect();
そのうえで切り替え対象のMutationObserverイベントを新たに作成といった方法を望んでいます。
MutationObserverイベント自体を監視、または稼働中のMutationObserverイベントを新たに更新するという方法はありますでしょうか?
ご教授お願い致します。
html
1<!-- popup.html --> 2 <ul class="monitoring_slot"> 3 <li data-name="tab_01">タブ1</li> 4 <li data-name="tab_02">タブ2</li> 5 <li data-name="tab_03">タブ3</li> 6 <li data-name="tab_04">タブ4</li> 7 <li data-name="tab_05">タブ5</li> 8 </ul>
js
1// background.js 2 3//「content_script.js」へ監視を伝達 4function monitoringSetting(type){ 5 chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 6 chrome.tabs.sendMessage(tabs[0].id, { 7 data: type 8 },function(msg) { 9 console.log("タブ送信情報:", type); 10 }); 11 }); 12} 13 14// 「popup.html」の監視対象要素切り替え 15$(".monitoring_slot li").click(function(){ 16 type = $(this).data("name"); 17 $(this).addClass('activ'); 18 monitoringSetting(type) 19}) 20 21 22// 「content_script.js」からデータ受け取り 23chrome.extension.onMessage.addListener( 24 function(request, sender, sendResponse) { 25 // 監視要素のデータを受け取ってなんだかんだ 26 } 27);
js
1// content_script.js 2 3chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { 4 console.log(msg); 5 var type = msg.data['type']; 6 // 監視対象の切り替え 7 switch(type){ 8 case "tab_01": 9 var $element = $("#tab_01"); 10 break; 11 case "tab_02": 12 var $element = $("#tab_02"); 13 break; 14 case "tab_03": 15 var $element = $("#tab_03"); 16 break; 17 case "tab_04": 18 var $element = $("#tab_04"); 19 break; 20 case "tab_05": 21 var $element = $("#tab_05"); 22 break; 23 } 24 25 // 監視要素のテキストデータを監視 26 var observer = new MutationObserver(function(monitoring) { 27 var data = $element.children("span").text(); 28 // 「background.js」へデータを伝達 29 chrome.extension.sendMessage({'value':data}); 30 }); 31 var config = { attributes:true, subtree: true }; 32 observer.observe($element, config); 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/06 07:32 編集