重开仓库内容:改推五个技能(browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)
按授权清空原有内容后重新提交(原 oil-ui-pro 一并移出,可从历史恢复)。 browser-harness 剔除 .venv 等运行环境;根 .gitignore 补记 .venv/ 与 node_modules/。
This commit is contained in:
1 parent
9a152a1952
commit
777f7fe5d0
240 files changed
+52518
-4409
No files matched your search
@@ -0,0 +1,48 @@
|
||||
# Connection & Tab Visibility
|
||||
|
||||
## The omnibox popup problem
|
||||
|
||||
When Chrome opens fresh, the only CDP `type: "page"` targets are `chrome://inspect` and `chrome://omnibox-popup.top-chrome/` (a 1px invisible viewport). If the daemon attaches to the omnibox popup, all subsequent work — including `new_tab()` and `goto_url()` — happens on tabs that exist in CDP but may not be visible in the Chrome UI.
|
||||
|
||||
The daemon's `attach_first_page()` handles this by creating an `about:blank` tab when no real pages exist. If you still end up on an invisible tab, use `switch_tab()` which calls `Target.activateTarget` to bring the tab to front.
|
||||
|
||||
## Startup sequence
|
||||
|
||||
1. Check if a daemon is already running with `daemon_alive()`
|
||||
2. If stale sockets exist but daemon is dead, clean them up
|
||||
3. List open tabs with `list_tabs()` to see what's available
|
||||
4. `ensure_real_tab()` attaches to a real page
|
||||
5. `switch_tab(target_id)` both attaches AND activates (brings to front)
|
||||
|
||||
```python
|
||||
if not daemon_alive():
|
||||
import os, ipc
|
||||
ipc.cleanup_endpoint("default")
|
||||
pid = ipc.pid_path("default")
|
||||
if pid.exists(): pid.unlink()
|
||||
ensure_daemon()
|
||||
|
||||
tabs = list_tabs()
|
||||
for t in tabs:
|
||||
print(t["url"][:60])
|
||||
|
||||
tab = ensure_real_tab()
|
||||
```
|
||||
|
||||
## Bringing Chrome to front
|
||||
|
||||
If Chrome is behind other windows or on another desktop:
|
||||
|
||||
```python
|
||||
import subprocess
|
||||
subprocess.run(["osascript", "-e", 'tell application "Google Chrome" to activate'])
|
||||
```
|
||||
|
||||
## Navigating
|
||||
|
||||
Prefer navigating an existing tab over `new_tab()`. Tabs created via CDP's `Target.createTarget` are visible but may open behind the active tab.
|
||||
|
||||
```python
|
||||
tab = ensure_real_tab()
|
||||
goto_url("https://example.com")
|
||||
```
|
||||
Reference in new issue
Block a user