diff --git a/dist/article/article.html b/dist/article/article.html index 71bd395..a1ffc1e 100644 --- a/dist/article/article.html +++ b/dist/article/article.html @@ -3,14 +3,14 @@ + content="default-src 'none'; script-src-elem 'sha256-XUiRvcvPhKzBU50B7nIFBLySVn2CJ3cNFgqtfeiRcTA='; img-src http://* https://*; style-src 'self' 'unsafe-inline'; frame-src http://* https://*; media-src http://* https://*"> Article
- + \ No newline at end of file diff --git a/dist/article/article.js b/dist/article/article.js index 03213c1..5cbdc95 100644 --- a/dist/article/article.js +++ b/dist/article/article.js @@ -19,9 +19,16 @@ let main = document.getElementById("main") main.innerHTML = dom.body.innerHTML document.addEventListener("click", event => { event.preventDefault() - if (event.target.href) post("request-navigation", event.target.href) + let target = event.target + while (target.nodeName !== "#document") { + if (target.href) { + window.renderer.requestNavigation(target.href) + break + } + target = target.parentNode + } }) document.addEventListener("contextmenu", event => { let text = document.getSelection().toString() - if (text) post("context-menu", [event.clientX, event.clientY], text) + if (text) window.renderer.contextMenu([event.clientX, event.clientY], text) }) \ No newline at end of file diff --git a/dist/article/preload.js b/dist/article/preload.js index c15cd6d..5840d5d 100644 --- a/dist/article/preload.js +++ b/dist/article/preload.js @@ -1 +1,10 @@ -global.post = require("electron").ipcRenderer.sendToHost \ No newline at end of file +const { contextBridge, ipcRenderer } = require("electron") + +contextBridge.exposeInMainWorld("renderer",{ + requestNavigation: (href) => { + ipcRenderer.sendToHost("request-navigation", href) + }, + contextMenu: (pos, text) => { + ipcRenderer.sendToHost("context-menu", pos, text) + } +}) \ No newline at end of file diff --git a/src/components/article.tsx b/src/components/article.tsx index b9f8098..10cb1f0 100644 --- a/src/components/article.tsx +++ b/src/components/article.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { renderToString } from "react-dom/server" import { RSSItem } from "../scripts/models/item" import { openExternal } from "../scripts/utils" @@ -230,6 +230,7 @@ class Article extends React.Component { key={this.props.item._id + (this.state.loadWebpage ? "_" : "")} src={this.state.loadWebpage ? this.props.item.link : this.articleView()} preload={this.state.loadWebpage ? null : "article/preload.js"} + webpreferences="contextIsolation,sandbox,disableDialogs,autoplayPolicy=document-user-activation-required" partition="sandbox" /> ) diff --git a/src/components/context-menu.tsx b/src/components/context-menu.tsx index 606c323..c615e48 100644 --- a/src/components/context-menu.tsx +++ b/src/components/context-menu.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { clipboard } from "electron" import { openExternal, cutText, googleSearch } from "../scripts/utils" import { ContextualMenu, IContextualMenuItem, ContextualMenuItemType, DirectionalHint } from "office-ui-fabric-react/lib/ContextualMenu" diff --git a/src/components/feeds/cards-feed.tsx b/src/components/feeds/cards-feed.tsx index 8c4e20a..165aff8 100644 --- a/src/components/feeds/cards-feed.tsx +++ b/src/components/feeds/cards-feed.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { FeedProps } from "./feed" import DefaultCard from "../cards/default-card" import { PrimaryButton, FocusZone } from 'office-ui-fabric-react'; diff --git a/src/components/feeds/list-feed.tsx b/src/components/feeds/list-feed.tsx index 4a164d9..c21079d 100644 --- a/src/components/feeds/list-feed.tsx +++ b/src/components/feeds/list-feed.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { FeedProps } from "./feed" import { DefaultButton, FocusZone, FocusZoneDirection } from 'office-ui-fabric-react'; import ListCard from "../cards/list-card"; diff --git a/src/components/log-menu.tsx b/src/components/log-menu.tsx index c252e34..8f9b1d6 100644 --- a/src/components/log-menu.tsx +++ b/src/components/log-menu.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { Callout, ActivityItem, Icon, DirectionalHint } from "@fluentui/react" import { AppLog, AppLogType } from "../scripts/models/app" import Time from "./utils/time" diff --git a/src/components/menu.tsx b/src/components/menu.tsx index 2fcd959..6b837d3 100644 --- a/src/components/menu.tsx +++ b/src/components/menu.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { Icon } from "@fluentui/react/lib/Icon" import { Nav, INavLink, INavLinkGroup } from "office-ui-fabric-react/lib/Nav" import { SourceGroup } from "../scripts/models/group" diff --git a/src/components/nav.tsx b/src/components/nav.tsx index 22bfce2..b976e97 100644 --- a/src/components/nav.tsx +++ b/src/components/nav.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { remote } from "electron" import { Icon } from "@fluentui/react/lib/Icon" import { AppState } from "../scripts/models/app" diff --git a/src/components/settings.tsx b/src/components/settings.tsx index 4e39c2f..cc39723 100644 --- a/src/components/settings.tsx +++ b/src/components/settings.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { Icon } from "@fluentui/react/lib/Icon" import { AnimationClassNames } from "@fluentui/react/lib/Styling" import AboutTab from "./settings/about" diff --git a/src/components/settings/about.tsx b/src/components/settings/about.tsx index 9e46785..952bb8f 100644 --- a/src/components/settings/about.tsx +++ b/src/components/settings/about.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { Stack, Link } from "@fluentui/react" import { openExternal } from "../../scripts/utils" import { remote } from "electron" diff --git a/src/components/settings/app.tsx b/src/components/settings/app.tsx index 7e259e0..aa21825 100644 --- a/src/components/settings/app.tsx +++ b/src/components/settings/app.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { urlTest, byteToMB, calculateItemSize } from "../../scripts/utils" import { getProxy, getProxyStatus, toggleProxyStatus, setProxy, getThemeSettings, setThemeSettings, ThemeSettings, getLocaleSettings, exportAll } from "../../scripts/settings" import { Stack, Label, Toggle, TextField, DefaultButton, ChoiceGroup, IChoiceGroupOption, loadTheme, Dropdown, IDropdownOption, PrimaryButton } from "@fluentui/react" diff --git a/src/components/settings/groups.tsx b/src/components/settings/groups.tsx index a2b7b86..8a1fc32 100644 --- a/src/components/settings/groups.tsx +++ b/src/components/settings/groups.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { SourceGroup } from "../../scripts/models/group" import { SourceState, RSSSource } from "../../scripts/models/source" import { IColumn, Selection, SelectionMode, DetailsList, Label, Stack, diff --git a/src/components/settings/rules.tsx b/src/components/settings/rules.tsx index b56ece5..6a8e72f 100644 --- a/src/components/settings/rules.tsx +++ b/src/components/settings/rules.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { SourceState, RSSSource } from "../../scripts/models/source" import { Stack, Label, Dropdown, IDropdownOption, TextField, PrimaryButton, Icon, DropdownMenuItemType, DefaultButton, DetailsList, IColumn, CommandBar, ICommandBarItemProps, Selection, SelectionMode, MarqueeSelection, IDragDropEvents } from "@fluentui/react" diff --git a/src/components/settings/sources.tsx b/src/components/settings/sources.tsx index ab54576..0d62a71 100644 --- a/src/components/settings/sources.tsx +++ b/src/components/settings/sources.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { Label, DefaultButton, TextField, Stack, PrimaryButton, DetailsList, IColumn, SelectionMode, Selection, IChoiceGroupOption, ChoiceGroup, IDropdownOption, Dropdown } from "@fluentui/react" import { SourceState, RSSSource, SourceOpenTarget } from "../../scripts/models/source" diff --git a/src/components/utils/article-search.tsx b/src/components/utils/article-search.tsx index e973124..46c9d50 100644 --- a/src/components/utils/article-search.tsx +++ b/src/components/utils/article-search.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { connect } from "react-redux" import { RootState } from "../../scripts/reducer" import { SearchBox, ISearchBox, Async } from "@fluentui/react" diff --git a/src/components/utils/danger-button.tsx b/src/components/utils/danger-button.tsx index 4bcd1d1..3bcf4e2 100644 --- a/src/components/utils/danger-button.tsx +++ b/src/components/utils/danger-button.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { PrimaryButton } from "@fluentui/react"; class DangerButton extends PrimaryButton { diff --git a/src/components/utils/time.tsx b/src/components/utils/time.tsx index 01e53a4..5ffa287 100644 --- a/src/components/utils/time.tsx +++ b/src/components/utils/time.tsx @@ -1,5 +1,5 @@ import * as React from "react" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" interface TimeProps { date: Date diff --git a/src/containers/nav-container.tsx b/src/containers/nav-container.tsx index f40c231..f621c9a 100644 --- a/src/containers/nav-container.tsx +++ b/src/containers/nav-container.tsx @@ -1,5 +1,5 @@ import { remote } from "electron" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { connect } from "react-redux" import { createSelector } from "reselect" import { RootState } from "../scripts/reducer" diff --git a/src/containers/settings/app-container.tsx b/src/containers/settings/app-container.tsx index 702bd2c..abed10d 100644 --- a/src/containers/settings/app-container.tsx +++ b/src/containers/settings/app-container.tsx @@ -1,4 +1,4 @@ -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { connect } from "react-redux" import { setLocaleSettings, importAll } from "../../scripts/settings" import { initIntl, saveSettings } from "../../scripts/models/app" diff --git a/src/containers/settings/sources-container.tsx b/src/containers/settings/sources-container.tsx index 9873d43..ce9990c 100644 --- a/src/containers/settings/sources-container.tsx +++ b/src/containers/settings/sources-container.tsx @@ -1,4 +1,4 @@ -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { remote } from "electron" import { connect } from "react-redux" import { createSelector } from "reselect" diff --git a/src/scripts/models/app.ts b/src/scripts/models/app.ts index e36afc5..55cde89 100644 --- a/src/scripts/models/app.ts +++ b/src/scripts/models/app.ts @@ -1,4 +1,4 @@ -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { RSSSource, INIT_SOURCES, SourceActionTypes, ADD_SOURCE, UPDATE_SOURCE, DELETE_SOURCE, initSources } from "./source" import { RSSItem, ItemActionTypes, FETCH_ITEMS, fetchItems } from "./item" import { ActionStatus, AppThunk, getWindowBreakpoint } from "../utils" diff --git a/src/scripts/models/group.ts b/src/scripts/models/group.ts index c213709..311dc79 100644 --- a/src/scripts/models/group.ts +++ b/src/scripts/models/group.ts @@ -1,5 +1,5 @@ import fs = require("fs") -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { SourceActionTypes, ADD_SOURCE, DELETE_SOURCE, addSource, RSSSource } from "./source" import { ActionStatus, AppThunk, domParser, AppDispatch } from "../utils" diff --git a/src/scripts/models/item.ts b/src/scripts/models/item.ts index a39a2f9..70e43a9 100644 --- a/src/scripts/models/item.ts +++ b/src/scripts/models/item.ts @@ -1,5 +1,5 @@ import * as db from "../db" -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import { domParser, htmlDecode, ActionStatus, AppThunk, openExternal } from "../utils" import { RSSSource } from "./source" import { FeedActionTypes, INIT_FEED, LOAD_MORE } from "./feed" diff --git a/src/scripts/models/source.ts b/src/scripts/models/source.ts index b7cf831..9c948be 100644 --- a/src/scripts/models/source.ts +++ b/src/scripts/models/source.ts @@ -1,5 +1,5 @@ import Parser = require("@yang991178/rss-parser") -import intl = require("react-intl-universal") +import intl from "react-intl-universal" import * as db from "../db" import { fetchFavicon, ActionStatus, AppThunk, parseRSS } from "../utils" import { RSSItem, insertItems, ItemActionTypes, FETCH_ITEMS, MARK_READ, MARK_UNREAD, MARK_ALL_READ } from "./item" diff --git a/src/scripts/settings.ts b/src/scripts/settings.ts index e5ff711..b421fe2 100644 --- a/src/scripts/settings.ts +++ b/src/scripts/settings.ts @@ -5,7 +5,7 @@ import locales from "./i18n/_locales" import Store = require("electron-store") import { schemaTypes } from "./config-schema" import fs = require("fs") -import intl = require("react-intl-universal") +import intl from "react-intl-universal" export const store = new Store()