1

ポップアップ、コンテンツスクリプト、バックグラウンドスクリプトの組み合わせを扱っています。残念ながら、私がそれらの中から選択したコミュニケーションは、望ましい結果を得ることができませんでした。

ブラウザメニューのアイコン/ポップアップを使用して webextension を開発する必要があります。クリックすると、ポップアップウィンドウにアイテムを含む専用メニューが開きます。ポップアップ特定のアイテムをクリックすると..タブが開き、特定のURLに移動して(パラメーターまたはPOSTを含むURLを介して)ログインし、サブページ(ポップアップアイテムテキストに固有)に移動する必要があります。

ポップアップと bg スクリプトの間、bg スクリプトとコンテンツ スクリプトなどの間でメッセージの組み合わせをいろいろ試していましたが、うまくいきませんでした。リクエストの同期にも問題がありました。これは、(windows.open 経由で) ログインしたにもかかわらず、さらにサブページを実行してロードできたためです。

これがどのように機能するか考えていますか?いくつかの短い例で最高ですか?標準の JavaScript のみを使用しました。

私の最初の試み:

マニフェスト.json

{
  "description": "test",
  "manifest_version": 2,
  "name": "extensiontest",
  "version": "1.0",
  "homepage_url": "https://xxxx.com",
  "icons": {
    "32": "beasts-32.png"
  },


  "applications": {
    "gecko": {
      "id": "testid@sss.com",
      "strict_min_version": "45.0"
    }
  },

  "content_scripts": 
  [
    {
      "matches": ["<all_urls>"],
      "run_at": "document_end",
      "js": ["content.js"]
    }
  ],

"browser_action": 
  {
  "default_icon": "popup.png",
  "default_popup":"popup.html"
  },

"background": 
  {
  "scripts": ["background.js"]
  },

"permissions": 
  [
    "tabs","storage"
  ]
}

popup.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="links.css"/>
</head>
<script src="popup.js"></script>
<body>
    <ul>
    <li><a id="bQuote" href="#">Quote</a></li>
    <li><a id="bSend" href="#">Send</a></li>
    </ul>
</body></html>

popup.js

function goQuote() {

    chrome.tabs.query({currentWindow: true, active: true}, function (tabs){
    var activeTab = tabs[0];
    chrome.tabs.sendMessage(activeTab.id, {"message": "Quote"});
   });

  // Generic Log In link
  window.open("Login-link","targetname");

}

function goSend() {

    chrome.tabs.query({currentWindow: true, active: true}, function (tabs){
    var activeTab = tabs[0];
    chrome.tabs.sendMessage(activeTab.id, {"message": "Send"});
   });

  // Generic Log In link
  window.open("Login-link","targetname");

}


document.addEventListener("DOMContentLoaded", function() {
  document.getElementById("bQuote").addEventListener("click", goQuote);
  document.getElementById("bSend").addEventListener("click", goSend);
});

content.js

chrome.runtime.onMessage.addListener(
      function(request, sender, sendResponse) {
        if( request.message === "Quote" ) {

          // Subpage link with same target name
          window.open("supbpage-link1","targetname");
             }
        if( request.message === "Send" ) {
          // Subpage link with same target name
          window.open("supbpage-link2","targetname");
             }
      }
    );
4

1 に答える 1

1

物事を調整するには、バックグラウンド スクリプトが必要です。

クリック イベントにメッセージを送信するために使用popup.jsされます。chrome.runtime.sendMessage()background.js

background.js

  1. chrome.runtime.onMessage()からのメッセージをキャッチするpopup.js
  2. chrome.tabs.create()ログインページを開き、タブ ID を記憶する。
  3. chrome.webNavigation.onCompleted.addEventListener()タブがロードされたことを検出する (tabId覚えているイベントと が必要ですframeId === 0);
  4. chrome.tabs.executeScript()そのタブで、content.jsフォームに入力して送信することを挿入します。
  5. chrome.webNavigation.onCompleted.addEventListener()タブが読み込まれていることを再度検出します。
  6. chrome.tabs.update()目的のサブページに移動します。
  7. 掃除。

また、いつでも問題が発生する可能性があることに注意してください。ユーザーがページの読み込みを中断したり、資格情報が間違っていたり、ネットワーク接続が失われたりする可能性があります:)

于 2016-07-20T16:51:48.213 に答える