2017-12-07 4 views
0

私はウェブサイトからデータを正しく取得していますが、popup.jsに送信する方法はありますか?私はexecuteScriptのコールバックを試みたが、それは私のために働くdoesnt。WebサイトからexecuteScriptでポップアップにデータを送信するには?

popup.js

function getData() { 
    chrome.tabs.query({active: true, currentWindow: true},function(tabs) { 
     chrome.tabs.executeScript(tabs[0].id,{ 
      file: 'getdata.js' 
     }); 
    }); 
} 
document.getElementById('clickme').addEventListener('click', getData); 

function loadData() { 
      chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
       chrome.tabs.update(tabs[0].id, {url: tabs[0].url}); 
       chrome.tabs.executeScript(tabs[0].id,{ 
        file: 'loaddata.js' 
       }); 
      }); 
      } 

document.getElementById('clickme2').addEventListener('click', loadData); 

getdata.js

var div = document.querySelectorAll('div'); 
var array = []; 
div.forEach(function(item) { 
    item.getAttribute('data'); 
    array.push(item.getAttribute('data')); 
}); 
console.log(array); 

loaddata.js

  var div = document.querySelectorAll('div'); 
       div.forEach(function(item, i){ 
          item.setAttribute('data', array[i]); 
         }); 

manifest.jsonを

{ 
    "manifest_version": 2, 
    "name": "aa", 
    "description": "bb", 
    "version": "1.0", 
    "icons": { 
     "48": "icon.png" 
    }, 
    "permissions": ["tabs", "<all_urls>", "contentSettings", "contextMenus", "unlimitedStorage"], 
    "browser_action": { 
     "default_icon": "icon.png", 
     "default_popup": "popup.html" 
    }, 
    "content_scripts": [ 
     { 
      "js": ["jquery-3.2.1.min.js", "popup.js"] 
     } 
    } 
} 

EDIT: 1.データを取得するには、配列を追加した後でexecuteScriptを使用します。 getdata.jsの最後にあります。

  1. アレイの送信方法。 popup.js/getdata.jsからloaddata.jsに移動しますか?

    ので

    executeScriptのコールバックを使用する代わりにconsole.log(array)を使用しての、「スクリプトの結果は最後に評価文がある」documentationによると

答えて

0

、あなたgetdata.js、1行だけを追加してみてください:

array; 

が最後の行です。

+0

ありがとうございます!それは動作し、私はpopup.jsの私のコンソールログで配列の値を見ることができます。しかし、私は別の問題がある、私はそれらの配列から送信する必要があります。 popup.jsから私のloaddata.jsへ(私はloadData()とloaddata.jsを私の質問に追加しました) – icedoutxcv

+0

getdata.jsからコールバックを取得すると、配列を変数background.jsに格納できます。次に、loaddata.jsを挿入するときに、そのスクリプトで拡張機能にchrome.runtime.sendMessageを実行させます。ドキュメントで確認してください。バックグラウンドスクリプトでは、メッセージのリスナーを設定し、loaddataからメッセージを受け取ったら、配列変数を返すだけです。それは理にかなっていますか? – maxpaj

+0

ある時点で、どこから始めるべきかわかりません。それは私の最初の拡張です、私は今chrome.tabsなどのような基本的なものだけです。あなたはこのステップのすべてを私に説明することができますか? – icedoutxcv

関連する問題