mirror of
https://github.com/runablehq/mini-browser.git
synced 2026-09-20 13:45:46 +08:00
59 lines
1.7 KiB
Bash
Executable File
59 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Resolve symlinks (e.g. when installed via npm install -g / npm link)
|
|
SOURCE="$0"
|
|
while [[ -L "$SOURCE" ]]; do
|
|
DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
SOURCE="$(readlink "$SOURCE")"
|
|
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE"
|
|
done
|
|
SCRIPT_DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
|
|
CHROME_PORT="${CHROME_PORT:-9222}"
|
|
CHROME_PID_FILE="${CHROME_PID_FILE:-$SCRIPT_DIR/.chrome-pid}"
|
|
CHROME_USER_DATA_DIR="${CHROME_USER_DATA_DIR:-$SCRIPT_DIR/.chrome-profile}"
|
|
CHROME_BIN="${CHROME_BIN:-$(command -v google-chrome-stable || command -v google-chrome || command -v chromium-browser || command -v chromium || true)}"
|
|
|
|
if [[ -z "$CHROME_BIN" ]]; then
|
|
echo "Chrome not found. Set CHROME_BIN." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Already running?
|
|
if [[ -f "$CHROME_PID_FILE" ]] && kill -0 "$(cat "$CHROME_PID_FILE")" 2>/dev/null; then
|
|
echo "Chrome already running (pid $(cat "$CHROME_PID_FILE"))"
|
|
exit 0
|
|
fi
|
|
|
|
# Fresh profile ensures --window-size is respected (no saved window state)
|
|
rm -rf -- "$CHROME_USER_DATA_DIR"
|
|
mkdir -p "$CHROME_USER_DATA_DIR"
|
|
|
|
"$CHROME_BIN" \
|
|
--remote-debugging-port="$CHROME_PORT" \
|
|
--user-data-dir="$CHROME_USER_DATA_DIR" \
|
|
--window-size=1024,768 \
|
|
--no-first-run \
|
|
--no-default-browser-check \
|
|
--disable-dev-shm-usage \
|
|
--disable-gpu \
|
|
--no-sandbox \
|
|
>/dev/null 2>&1 &
|
|
|
|
echo $! >"$CHROME_PID_FILE"
|
|
|
|
# Wait for CDP.
|
|
for _ in $(seq 1 40); do
|
|
if curl -fs "http://127.0.0.1:${CHROME_PORT}/json/version" | grep -q webSocketDebuggerUrl; then
|
|
echo "Chrome started (pid $(cat "$CHROME_PID_FILE"))"
|
|
exit 0
|
|
fi
|
|
sleep 0.25
|
|
done
|
|
|
|
echo "Chrome failed to start" >&2
|
|
kill "$(cat "$CHROME_PID_FILE")" 2>/dev/null || true
|
|
rm -f "$CHROME_PID_FILE"
|
|
exit 1
|