【问题标题】:Why does cordova-plugin-nativestorage work on browser but not on phone为什么 cordova-plugin-nativestorage 可以在浏览器上工作,但不能在手机上工作
【发布时间】:2018-06-26 12:30:28
【问题描述】:

我正在使用 Phonegap CLI 为我的项目提供服务,我的插件版本是:2.3.1 所以,我写了下面的代码在设备准备好后执行:

NativeStorage.getItem("abcd",function(){
			console.log("success");alert("success");
		},function(){
			console.log("fail");alert("failed :)");
		});

当我在浏览器上测试它时,这非常有效。但是,当我在我的安卓手机上打开这个应用程序时,NativeStorage 代码根本不起作用。

我使用 weinre 调试我的应用程序:

我收到错误:ReferenceError: NativeStorage is not defined

我还删除了插件和所有平台并重新安装了它们;但是,我仍然遇到同样的错误。

你能帮我找出问题吗?

【问题讨论】:

  • 您确定不想使用 localStorage?
  • LocalStorage 在 iOS (gonehybrid.com/…) 中是不可预测的,我需要我的应用在 iOS 中可用
  • @TakshPratapSingh 您能否告诉我们您在代码中的哪个位置调用了这个 sn-p。也许一个较小的代表性用例可以复制您的问题。通常,此类问题与 deviceready 有关,但您在 cmets 中提到您已经考虑过。

标签: cordova-plugins phonegap-plugins hybrid-mobile-app phonegap cordova-nativestorage


【解决方案1】:

在调用 NativeStorage 插件之前,您是否在等待设备准备就绪?

在您的 index.js 中,您应该为设备处理添加类似以下代码的内容。

if (window.cordova) {
  document.addEventListener("deviceready", onDeviceReady, false);
}

注意:如果你想在没有 Cordova 容器的浏览器中使用你的应用程序,你应该像这样定义一个 else 分支。如果它不是 Cordova 容器,它将跳转到 else 分支并立即执行该函数。

if (window.cordova) {
  document.addEventListener("deviceready", onDeviceReady, false);
} else {
  onDeviceReady();
}

document.addEventListener("deviceready", onDeviceReady, false)

  • 参数 1 - “deviceready”:事件的名称
  • 参数 2 - onDeviceReady:启动应用程序的函数的名称。 这个名字当然可以和我的名字不同。
  • 参数 3 - 假 (可选):一个布尔值,指定事件是否应该 在捕获或冒泡阶段执行。 (资源: w3schools.com)

有关 addEventListener 的更多信息:https://www.w3schools.com/jsref/met_document_addeventlistener.asp

在您的“onDeviceReady”函数或更高版本中,您现在可以调用您在 config.xml 中定义的插件

例如:

function onDeviceReady() {
  //call your plugins
  NativeStorage.getItem(<...>);
}

希望对你有帮助。

【讨论】:

  • 我已经在检查 deviceready 但插件 simpy 在我的手机上不起作用。实际上,我记得在某处读过,只有在使用内置应用程序时才能在手机上使用插件,而不是在使用 phonegap 开发人员应用程序时。这是真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2021-01-23
  • 1970-01-01
  • 2014-06-26
相关资源
最近更新 更多