0

拡張機能のアイコンがクリックされたときにアクティブ タブのソース コードを取得する必要があります。新しいタブで表示する必要があります (ポップアップが 800px に制限されているなどの理由により)。

ポップアップを使用していたときは問題ありませんでしたが、新しいタブにデータを取得したいと考えています。

何が起きているかというと、 onClickedコールバックで使用されるtargetTab変数に正しいタブ情報が含まれています。ただし、新しいタブ (popup.html) が開かれると、何も起こりません。document.body.innerHTMLは変更されません。

何か案は?

マニフェスト.json

{
  "name": "Stock Alert",
  "description": "Create an alert and display streaming stock quotes.",
  "version": "1.1",
  "permissions": [
    "https://www.gwm.ml.wallst.com/",
    "https://*/*",
    "http://*/*",
    "tabs",
    "activeTab"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_icon": "logo.png"
  },
  "manifest_version": 2
}

background.js

chrome.browserAction.onClicked.addListener(function(targetTab) {
  chrome.tabs.create({'url': chrome.extension.getURL('popup.html')}, function(tab)
  {
            chrome.tabs.executeScript( 
            targetTab.id,
            {
                code: "document.getElementsByTagName('html')[0].innerHTML;"
            }, 
            function (sourceCode)
            {
                document.getElementById('dump').innerHTML = sourceCode;
            });
  });
});

popup.html (誤称。これは onClicked で作成された新しいタブの URL です)

<html>
<head>
<title>Stock Tracker</title>
<!--<script src="background.js"></script>-->
<link href="Streamer.css.package.css" rel="stylesheet" type="text/css">
</head>

<body>
<div id="out"></div>
<div id="dump"></div>
</body>
</html>
4

1 に答える 1

1

問題は、コールバック関数がバックグラウンド ページ コンテキスト内で実行されることです。したがって<div id="dump"></div>、ポップアップ ページ内ではなく、そのページ内を検索しようとします。

いじって、次の解決策を思いつきました。

  1. クリックすると、現在のページのコンテンツを取得します
  2. そのコンテンツをバックグラウンド ページに保存する
  3. popup.html を読み込む
  4. 読み込み時に、バックグラウンド ページからコード コンテンツを取得します

background.js

var myCode;

chrome.browserAction.onClicked.addListener(function(targetTab) {
    chrome.tabs.executeScript( 
    targetTab.id,
    {
        code: "document.getElementsByTagName('html')[0].innerHTML;"
    }, 
    function (sourceCode)
    {            
        myCode = sourceCode;
        chrome.tabs.create({'url': chrome.extension.getURL('popup.html')});
    });
});

popup.html

追加<script src="popup.js"></script>

popup.js

chrome.runtime.getBackgroundPage(function(bg)
{
   document.getElementById('dump').innerHTML = bg.myCode;
});
于 2013-10-02T10:35:59.060 に答える