我的webapp在ios safari私密浏览中有javascript错误:
JavaScript的:错误
未定义
QUOTA_EXCEEDED_ERR:DOM例外22:尝试向存储添加内容......
我的代码:
localStorage.setItem('test',1)
Run Code Online (Sandbox Code Playgroud) 我能够成功地从我的服务器获取推送通知并使用此更新反应组件
self.addEventListener('push', event => {
const data = event.data.json();
event.waitUntil(
self.registration.showNotification(data.title, {
body: data.body,
image: './Flowster-icon-32.png'
})
);
const channel = new BroadcastChannel('sw-messages');
channel.postMessage(data);
});
Run Code Online (Sandbox Code Playgroud)
但是浏览器 IE、safari、donto 支持 BroadcastChannel,甚至这些浏览器不支持 client.postMessage,我怎样才能让它在这些浏览器中工作。我在这里先向您的帮助表示感谢。
我正在使用 sessionStorage 来保存身份验证信息,并且需要将此信息复制到正在打开的其他选项卡。我创建了一个codesandbox来重现这个问题。我没有在这篇文章中包含代码,因为它很长。
当在另一个窗口中打开仪表板链接时,由于弹出错误而无法呈现。
编辑: 我已在下面包含所有必要的代码。
应用程序.js
export default function App() {
return (
<>
<Router>
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/login">
<Login />
</Route>
<Route path="/dashboard">
<Dashboard />
</Route>
</Switch>
</Router>
</>
);
}
Run Code Online (Sandbox Code Playgroud)
仪表板.js
export default (props) => {
const [isLogged, setIsLogged] = useState(false);
const [email, setEmail] = useState();
const [token, setToken] = useState();
const authChannel = new BroadcastChannel("auth");
useEffect(() => {
setToken(sessionStorage.getItem("token"));
setEmail(sessionStorage.getItem("email"));
setIsLogged(sessionStorage.getItem("token") ? true : false);
authChannel.postMessage({ action: "created", source: …Run Code Online (Sandbox Code Playgroud)