Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/bridges/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ const settingsBridge = {
ipcRenderer.invoke("set-menu", state)
},

getWebViewOpenUrlStatus: (): boolean => {
return ipcRenderer.sendSync("get-webview-open-url-status")
},
toggleWebViewOpenUrlStatus: () => {
ipcRenderer.send("toggle-webview-open-url-status")
},

getProxyStatus: (): boolean => {
return ipcRenderer.sendSync("get-proxy-status")
},
Expand Down
4 changes: 4 additions & 0 deletions src/components/article.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,10 @@ class Article extends React.Component<ArticleProps, ArticleState> {
}

keyDownHandler = (input: Electron.Input) => {
if (this.state.loadWebpage) {
// 内置网页中禁止快捷键以防影响网页登录之类功能,
return;
}
if (input.type === "keyDown") {
switch (input.key) {
case "Escape":
Expand Down
24 changes: 24 additions & 0 deletions src/components/settings/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ type AppTabProps = {
}

type AppTabState = {
webViewOpenUrlStatus: boolean
pacStatus: boolean
pacUrl: string
themeSettings: ThemeSettings
Expand All @@ -46,6 +47,7 @@ class AppTab extends React.Component<AppTabProps, AppTabState> {
constructor(props) {
super(props)
this.state = {
webViewOpenUrlStatus: window.settings.getWebViewOpenUrlStatus(),
pacStatus: window.settings.getProxyStatus(),
pacUrl: window.settings.getProxy(),
themeSettings: getThemeSettings(),
Expand Down Expand Up @@ -148,6 +150,13 @@ class AppTab extends React.Component<AppTabProps, AppTabState> {
{ key: "zh-TW", text: "中文(繁體)" },
]

toggleWebViewOpenUrlStatus = () => {
window.settings.toggleWebViewOpenUrlStatus()
this.setState({
webViewOpenUrlStatus: window.settings.getWebViewOpenUrlStatus(),
})
}

toggleStatus = () => {
window.settings.toggleProxyStatus()
this.setState({
Expand Down Expand Up @@ -220,6 +229,21 @@ class AppTab extends React.Component<AppTabProps, AppTabState> {
</Stack.Item>
</Stack>

<Stack horizontal verticalAlign="baseline">
<Stack.Item grow>
<Label>{intl.get("app.enableWebViewOpenUrl")}</Label>
</Stack.Item>
<Stack.Item>
<Toggle
checked={this.state.webViewOpenUrlStatus}
onChange={this.toggleWebViewOpenUrlStatus}
/>
</Stack.Item>
</Stack>
<span className="settings-hint up">
{intl.get("app.webViewOpenUrlHint")}
</span>

<Stack horizontal verticalAlign="baseline">
<Stack.Item grow>
<Label>{intl.get("app.enableProxy")}</Label>
Expand Down
13 changes: 8 additions & 5 deletions src/electron.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { app, ipcMain, Menu, nativeTheme } from "electron"
import { ThemeSettings, SchemaTypes } from "./schema-types"
import { store } from "./main/settings"
import { getWebViewOpenUrlStatus, store } from "./main/settings"
import performUpdate from "./main/update-scripts"
import { WindowManager } from "./main/window"
import { saveCookies } from "./main/cookies"

if (!process.mas) {
const locked = app.requestSingleInstanceLock()
Expand Down Expand Up @@ -106,10 +107,12 @@ if (process.platform === "darwin") {
const winManager = new WindowManager()

app.on("window-all-closed", () => {
if (winManager.hasWindow()) {
winManager.mainWindow.webContents.session.clearStorageData({
storages: ["cookies", "localstorage"],
})
if (!getWebViewOpenUrlStatus()) {
if (winManager.hasWindow()) {
winManager.mainWindow.webContents.session.clearStorageData({
storages: ["cookies", "localstorage"],
})
}
}
winManager.mainWindow = null
if (restarting) {
Expand Down
26 changes: 26 additions & 0 deletions src/main/cookies.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Store = require("electron-store")
import { getWebViewOpenUrlStatus } from "./settings"
import { BrowserWindow, WebContents } from "electron"

const cookieStore = new Store()
const COOKIES_KEY = "cookiesKey"
export async function saveCookies(webContents: WebContents) {
const currentSession = webContents.session
await currentSession.cookies.flushStore()
let cookies = await currentSession.cookies.get({})
let customCookies = cookies.map(cookie => ({
...cookie,
url:(cookie.secure ? 'https://' : 'http://') + cookie.domain.replace(/^\./, '') + cookie.path
}))
cookieStore.set(COOKIES_KEY, customCookies)
}
export async function loadCookies(webContents: WebContents) {
const savedCookies = cookieStore.get(COOKIES_KEY)
cookieStore.get
if (savedCookies && savedCookies.length > 0) {
const currentSession = webContents.session
savedCookies.forEach(cookie => {
currentSession.cookies.set(cookie)
})
}
}
14 changes: 14 additions & 0 deletions src/main/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@ ipcMain.handle("set-menu", (_, state: boolean) => {
store.set(MENU_STORE_KEY, state)
})

const WEBVIEW_OPEN_URL_STATUS_KEY = "webViewOpenUrlStatus"
export function getWebViewOpenUrlStatus() {
return store.get(WEBVIEW_OPEN_URL_STATUS_KEY, false)
}
function toggleWebViewOpenUrlStatus() {
store.set(WEBVIEW_OPEN_URL_STATUS_KEY, !getWebViewOpenUrlStatus())
}
ipcMain.on("get-webview-open-url-status", event => {
event.returnValue = getWebViewOpenUrlStatus()
})
ipcMain.on("toggle-webview-open-url-status", () => {
toggleWebViewOpenUrlStatus()
})

const PAC_STORE_KEY = "pac"
const PAC_STATUS_KEY = "pacOn"
function getProxyStatus() {
Expand Down
27 changes: 22 additions & 5 deletions src/main/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import fs = require("fs")
import { ImageCallbackTypes, TouchBarTexts } from "../schema-types"
import { initMainTouchBar } from "./touchbar"
import fontList = require("font-list")
import settingsBridge from "../bridges/settings"
import { getWebViewOpenUrlStatus } from "./settings"
import { loadCookies, saveCookies } from "./cookies"

export function setUtilsListeners(manager: WindowManager) {
async function openExternal(url: string, background = false) {
Expand All @@ -22,16 +25,24 @@ export function setUtilsListeners(manager: WindowManager) {

app.on("web-contents-created", (_, contents) => {
contents.setWindowOpenHandler(details => {
if (contents.getType() === "webview")
openExternal(
details.url,
details.disposition === "background-tab"
)
if (contents.getType() === "webview") {
if (getWebViewOpenUrlStatus()) {
contents.loadURL(details.url)
} else {
openExternal(
details.url,
details.disposition === "background-tab"
)
}
}
return {
action: manager.hasWindow() ? "deny" : "allow",
}
})
contents.on("will-navigate", (event, url) => {
if (getWebViewOpenUrlStatus()) {
return;
}
event.preventDefault()
if (contents.getType() === "webview") openExternal(url)
})
Expand Down Expand Up @@ -237,6 +248,12 @@ export function setUtilsListeners(manager: WindowManager) {
contents.send("webview-keydown", input)
}
})
if (getWebViewOpenUrlStatus()) {
loadCookies(contents)
contents.on('did-finish-load', () => {
saveCookies(contents)
})
}
}
})

Expand Down
1 change: 1 addition & 0 deletions src/schema-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export type SchemaTypes = {
theme: ThemeSettings
pac: string
pacOn: boolean
webViewOpenUrlStatus: boolean
view: ViewType
locale: string
sourceGroups: SourceGroup[]
Expand Down
2 changes: 2 additions & 0 deletions src/scripts/i18n/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@
"theme": "Theme",
"lightTheme": "Light mode",
"darkTheme": "Dark mode",
"enableWebViewOpenUrl": "Enable WebView open url",
"webViewOpenUrlHint": "Enabling this switch will save cookies data for the built-in browser.",
"enableProxy": "Enable Proxy",
"badUrl": "Invalid URL",
"pac": "PAC Address",
Expand Down
2 changes: 2 additions & 0 deletions src/scripts/i18n/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@
"theme": "应用主题",
"lightTheme": "浅色模式",
"darkTheme": "深色模式",
"enableWebViewOpenUrl": "允许内置浏览器打开网页",
"webViewOpenUrlHint": "开启后会保存内置浏览器的cookie数据。",
"enableProxy": "启用代理",
"badUrl": "请正确输入URL",
"pac": "PAC地址",
Expand Down