diff options
author | Teddy Wing | 2023-11-13 03:12:25 +0100 |
---|---|---|
committer | Teddy Wing | 2023-11-13 03:12:25 +0100 |
commit | 11810a38f19e86a2b13493566e8ad6b2b00e0d67 (patch) | |
tree | d1e9a40e2ebd5be353107f566e4b34259e66f134 /main.go | |
download | swextreload-11810a38f19e86a2b13493566e8ad6b2b00e0d67.tar.bz2 |
Ideas for Extreload tab reloading for Manifest V3
I was having a hard time jiggering the Extreload code to get tab
reloading working with Manifest V3 extensions. This is an experiment
using a better API to interact with the Chrome DevTools Protocol. It
does correctly reload a Manifest V3 extension's current tab, by sleeping
briefly to wait for the service worker to reinstall, then executing the
tab reload call.
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 101 |
1 files changed, 101 insertions, 0 deletions
@@ -0,0 +1,101 @@ +package main + +import ( + "context" + "log" + "time" + + "github.com/chromedp/cdproto/target" + "github.com/chromedp/chromedp" +) + +func main() { + allocatorContext, cancel := chromedp.NewRemoteAllocator( + context.Background(), + "ws://127.0.0.1:55755/devtools/browser/4536efdf-6ddf-40b6-9a16-258a1935d866", + ) + defer cancel() + + ctx, cancel := chromedp.NewContext(allocatorContext) + defer cancel() + + targets, err := chromedp.Targets(ctx) + if err != nil { + log.Fatalf("error: targets: %v", err) + } + + log.Printf("Targets: %#v", targets) + println() + + var targetID target.ID + for _, target := range targets { + if target.URL == "chrome-extension://imcibeelfmccdpnnlemllnepgbfdbkgo/background.bundle.js" { + log.Printf("Target: %#v", target) + targetID = target.TargetID + break + } + } + + targetCtx, cancel := chromedp.NewContext(ctx, chromedp.WithTargetID(targetID)) + defer cancel() + + var runtimeResp []byte + err = chromedp.Run( + targetCtx, + // chromedp.Evaluate(`chrome.runtime.reload();`, &runtimeResp), + // chromedp.Evaluate(`chrome.tabs.reload();`, &tabsResp), + // chromedp.Evaluate(`chrome.runtime.reload();`, nil), + // chromedp.EvaluateAsDevTools(`chrome.runtime.reload();`, nil), + chromedp.Evaluate(`chrome.runtime.reload();`, nil), + // chromedp.Evaluate(`chrome.tabs.reload();`, nil), + ) + if err != nil { + log.Fatalf("error: run: %v", err) + } + + // var tabsResp []byte + // err = chromedp.Run( + // targetCtx, + // // chromedp.Evaluate(`chrome.tabs.reload();`, &tabsResp), + // // chromedp.Evaluate(`chrome.tabs.reload();`, nil), + // chromedp.EvaluateAsDevTools(`chrome.tabs.reload();`, nil), + // ) + // if err != nil { + // log.Fatalf("error: run tabs: %v", err) + // } + + log.Printf("Runtime: %v", string(runtimeResp)) + // log.Printf("Tabs: %v", string(tabsResp)) + + time.Sleep(200 * time.Millisecond) + + targets, err = chromedp.Targets(ctx) + if err != nil { + log.Fatalf("error: targets2: %v", err) + } + + log.Printf("Targets: %#v", targets) + println() + + for _, target := range targets { + if target.URL == "chrome-extension://imcibeelfmccdpnnlemllnepgbfdbkgo/background.bundle.js" { + log.Printf("Target: %#v", target) + targetID = target.TargetID + break + } + } + + targetCtx, cancel = chromedp.NewContext(ctx, chromedp.WithTargetID(targetID)) + defer cancel() + + var tabsResp []byte + err = chromedp.Run( + targetCtx, + chromedp.Evaluate(`chrome.tabs.reload();`, nil), + ) + if err != nil { + log.Fatalf("error: run tabs: %v", err) + } + + log.Printf("Tabs: %v", string(tabsResp)) +} |