Explorar o código

Content script now also receives message from background in PS

jherve hai 1 ano
pai
achega
76eae2110d
Modificáronse 3 ficheiros con 19 adicións e 6 borrados
  1. 3 4
      src/Background.purs
  2. 7 1
      src/Content.purs
  3. 9 1
      src/RuntimeMessage.purs

+ 3 - 4
src/Background.purs

@@ -4,14 +4,12 @@ import Prelude
 
 
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.Listener (mkListener)
 import Browser.WebExt.Listener (mkListener)
-import Browser.WebExt.Message (mkMessage)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Tabs (Tab)
 import Browser.WebExt.Tabs (Tab)
-import Browser.WebExt.Tabs as Tabs
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Class (class MonadEffect)
 import Effect.Class (class MonadEffect)
 import Effect.Class.Console (log, logShow)
 import Effect.Class.Console (log, logShow)
-import ExampleWebExt.RuntimeMessage (RuntimeMessage, mkRuntimeMessageHandler)
+import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToContent)
 
 
 main :: Effect Unit
 main :: Effect Unit
 main = do
 main = do
@@ -22,7 +20,8 @@ main = do
 
 
 browserActionOnClickedHandler :: Tab -> Effect Unit
 browserActionOnClickedHandler :: Tab -> Effect Unit
 browserActionOnClickedHandler tab = do
 browserActionOnClickedHandler tab = do
-  _ <- Tabs.sendMessage tab.id $ mkMessage { clicked: tab.id }
+  logShow tab
+  _ <- sendMessageToContent tab.id RuntimeMessageRequestPageContent
   pure unit
   pure unit
 
 
 contentScriptMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage → m Unit
 contentScriptMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage → m Unit

+ 7 - 1
src/Content.purs

@@ -3,17 +3,20 @@ module ExampleWebExt.Content where
 import Prelude
 import Prelude
 
 
 import Browser.DOM (getBrowserDom)
 import Browser.DOM (getBrowserDom)
+import Browser.WebExt.Runtime (onMessageAddListener)
 import Data.Either (Either(..))
 import Data.Either (Either(..))
 import Effect (Effect)
 import Effect (Effect)
+import Effect.Class (class MonadEffect)
 import Effect.Class.Console (logShow)
 import Effect.Class.Console (logShow)
 import Effect.Console (log)
 import Effect.Console (log)
-import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), sendMessageToBackground)
+import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), mkRuntimeMessageHandler, sendMessageToBackground)
 import LinkedIn (extractFromDocument, getContext)
 import LinkedIn (extractFromDocument, getContext)
 
 
 main :: Effect Unit
 main :: Effect Unit
 main = do
 main = do
   log "[content] starting up"
   log "[content] starting up"
 
 
+  onMessageAddListener $ mkRuntimeMessageHandler backgroundMessageHandler
   _ <- sendMessageToBackground RuntimeMessageContentInit
   _ <- sendMessageToBackground RuntimeMessageContentInit
 
 
   dom <- getBrowserDom
   dom <- getBrowserDom
@@ -26,3 +29,6 @@ main = do
       _ <- sendMessageToBackground $ RuntimeMessageContext ctx'
       _ <- sendMessageToBackground $ RuntimeMessageContext ctx'
       pure unit
       pure unit
     Left _ -> log "Could not send context"
     Left _ -> log "Could not send context"
+
+backgroundMessageHandler ∷ ∀ m. MonadEffect m => RuntimeMessage → m Unit
+backgroundMessageHandler m = logShow m

+ 9 - 1
src/RuntimeMessage.purs

@@ -2,9 +2,11 @@ module ExampleWebExt.RuntimeMessage where
 
 
 import Prelude
 import Prelude
 
 
-import Browser.Runtime (Listener, mkListener)
+import Browser.WebExt.Listener (Listener, mkListener)
 import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
 import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
 import Browser.WebExt.Runtime as Runtime
 import Browser.WebExt.Runtime as Runtime
+import Browser.WebExt.Tabs (TabId)
+import Browser.WebExt.Tabs as Tabs
 import Data.Argonaut.Core (Json)
 import Data.Argonaut.Core (Json)
 import Data.Argonaut.Decode (class DecodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode (class DecodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
@@ -20,6 +22,7 @@ import LinkedIn.PageUrl (PageUrl)
 data RuntimeMessage =
 data RuntimeMessage =
   RuntimeMessageContentInit
   RuntimeMessageContentInit
   | RuntimeMessageContext PageUrl
   | RuntimeMessageContext PageUrl
+  | RuntimeMessageRequestPageContent
 
 
 derive instance Generic RuntimeMessage _
 derive instance Generic RuntimeMessage _
 instance Show RuntimeMessage where show = genericShow
 instance Show RuntimeMessage where show = genericShow
@@ -31,6 +34,11 @@ sendMessageToBackground msg = do
   _ <- Runtime.sendMessage $ mkMessage msg
   _ <- Runtime.sendMessage $ mkMessage msg
   pure unit
   pure unit
 
 
+sendMessageToContent :: TabId -> RuntimeMessage -> Effect Unit
+sendMessageToContent tabId msg = do
+  _ <- Tabs.sendMessage tabId $ mkMessage msg
+  pure unit
+
 decodeRuntimeMessage ∷ Message → Either String RuntimeMessage
 decodeRuntimeMessage ∷ Message → Either String RuntimeMessage
 decodeRuntimeMessage m =
 decodeRuntimeMessage m =
   case unwrapMessage m of
   case unwrapMessage m of