1

ポップアップ、コンテンツスクリプト、およびバックグラウンドスクリプトの組み合わせを処理します。 Unfotrunatelly私がそれらの中から選んだコミュニケーションは私に望みの結果を得ることができませんでした。Webextensionを使用して特定のページにログインし、1回のクリックでサブページを表示します。

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

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

これはどのように機能するか考えていますか?いくつかのショールの例で最高ですか? 私は標準のjavascriptのみを使用しました。

私の最初の試み:

manifest.jsonを

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


    "applications": { 
    "gecko": { 
     "id": "[email protected]", 
     "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"); 
      } 
     } 
    ); 
+0

あなたの試みをより詳しく説明して、うまくいかなかったことを強調すると、それは役に立ちます。 – Xan

+0

私はクリックしたポップアップアイテムに基づいて特定のサブページに入ることができません..私はいつも最初のページに入る... – Bramo

+0

私はコンセプトを探しています..方法とは何ですか、開いているタブ、ロゴ入り、さらに特定のサブページに進む – Bramo

答えて

1

あなたは物事を編成するために、バックグラウンドスクリプトを必要とします。

popup.jschrome.runtime.sendMessage()をクリックすると、クリックイベントでbackground.jsにメッセージが送信されます。 background.js

  1. chrome.runtime.onMessage()ログインページを開き、タブIDを覚えておくpopup.js
  2. chrome.tabs.create()からのメッセージをキャッチします。
  3. chrome.webNavigation.onCompleted.addEventListener()が検出されました(あなたが記憶したtabIdのイベントとframeId === 0のイベントが必要です)。
  4. chrome.tabs.executeScript()content.jsを入力してフォームに入力して送信します。
  5. chrome.webNavigation.onCompleted.addEventListener()再びタブが検出されました。
  6. chrome.tabs.update()目的のサブページにナビゲートします。
  7. クリーンアップ。

いつでも何かが間違っている可能性があります:ユーザーがページの読み込みを中断したり、資格情報が間違ったり、ネットワーク接続が消えるなど:)

+0

それは有望であるようです!最終結果を知るためにそれを作成するには、しばらく時間がかかります。どうもありがとう! – Bramo

+0

ありがとう!できます!あなたは私の命を救った! :) – Bramo

関連する問題