如何在 Nativescript Vue WebView 中启用 LocalStorage?
Posted
技术标签:
【中文标题】如何在 Nativescript Vue WebView 中启用 LocalStorage?【英文标题】:How do I enable LocalStorage in a Nativescript Vue WebView? 【发布时间】:2020-01-23 17:28:23 【问题描述】:我的 Nativscript Vue 应用程序中有一个 WebView
,但在 android 上,嵌入式网站无法访问浏览器中的 localStorage。 This question 解释了如何为 Angular 做这件事。问题是不清楚应该从哪里获取 webview 实例。完整性问题:如何访问包含 android
属性的 WebView 实例以启用本地存储?
【问题讨论】:
你当然可以在Vue中添加loaded
监听器并访问webView.android
。这不是 Vue 的限制。
对不起@douira,也许你可以尝试更好地询问或以不同的方式询问。您链接的另一个 SO 线程已经显示了它在 Android 上的启用方式。正如我已经提到的,Vue 仍然支持所有这些事件和原生对象。所以如果你说你不能让它与你的 Vue 组件一起工作,至少你应该说明原因。
我现在已经澄清并回答了我的解决方案。请重新考虑这个问题与现在相比有多糟糕。
loadFinished
事件在 WebView 中的每个页面导航上触发。使用加载的事件保存它,您只需为 WebView 执行一次。
【参考方案1】:
这就是我最终解决它的方法。我需要访问通过属性event.object
中的事件处理程序传递的WebView。组件上没有名为 onWebViewLoaded
的事件,因为这不是 Angular。相反,我们需要在WebView
元素上挂钩loadFinished
事件。
<template>
<Page>
<WebView
src="https://www.example.com/"
@loaded="onLoaded"
/>
</Page>
</template>
<script>
export default
methods:
//when the webview finishes loading
onLoaded(event)
//get the webview
const webView = event.object
//if there is android
if (webView.android)
//enable dom storage in the webview on android
webView.android.getSettings().setDomStorageEnabled(true)
</script>
【讨论】:
成功了,谢谢【参考方案2】:只需将 Vuex 与此插件 nativescript-localstorage 结合使用即可。 我说它在 Nativescript 6 上未经测试。我可以说它有效,因为我自己使用它。
store.js
的示例
import Vue from 'vue';
import Vuex from 'vuex';
import localStorage from 'nativescript-localstorage';
const NSVuexPersistent = store =>
let storageStr = localStorage.getItem('ns-vuex-persistent');
if (storageStr)
store.replaceState(JSON.parse(storageStr))
store.subscribe((mutation, state) =>
// Suscribe hook.
localStorage.setItem('ns-vuex-persistent', JSON.stringify(state));
)
;
Vue.use(Vuex);
export default new Vuex.Store(
state:
nations: null
,
plugins: [NSVuexPersistent],
mutations:
updateNations(state, nations)
state.nations= nations;
);
你的main.js
看起来如何(添加这个):
import store from './store';
new Vue(
store,
render: h => h('frame', [h(App)])
).$start()
【讨论】:
这并不能以任何方式解决问题。我问的是如何为 webView 启用 localStorage,而不是如何保持 nativescript 状态。 我的错。我误读了你的问题。就像@Manoj 说的:所以如果你说你不能让它与你的 Vue 组件一起工作,至少你应该证明原因。以上是关于如何在 Nativescript Vue WebView 中启用 LocalStorage?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 nativescript-vue 中的 RadDataForm 样式? (Nativescript-Vue)
NativeScript-Vue:如何安装 BottomNavigation 组件
如何在 nativescript-vue 弹出窗口中使用 vue 组件?
如何在 nativescript-vue 中渲染编写复杂的数学方程? [关闭]
如何在 NativeScript-Vue 中从 RadListView 更改“loadOnDemandItemTemplate”