Phonegap 代码作为 Web 应用程序

2024-04-01

我正在考虑重新使用我的phonegap html、css 和js 代码作为网络应用程序。 我将仔细检查并删除所有仅限移动设备的功能。

目的是拥有一个提供一些移动应用程序功能的网络应用程序,我目前使用的移动设备功能很少。但我猜维护我的移动应用程序代码的每个版本都会很麻烦。

你们中有人尝试过这个吗?有小费吗 ?


通过响应式设计,您的phonegap 代码应该可以在几乎所有设备上运行。了解它正在运行的设备(设备和操作系统)非常重要,以便您可以做出相应的响应。我建立一个window.deviceInfo预先包含以下信息的对象:

  • window.deviceInfo.type: handheld, tablet, desktop
  • window.deviceInfo.brand: ios, android, microsoft, webos, blackberry
  • window.deviceInfo.mode: browser, standalone, webview
  • window.deviceInfo.mobile: true, false 
  • window.deviceInfo.phonegap: true, false

我使用单个容器<div> called viewport创建我的响应式容器并根据其所在的设备调整其大小。

Demo: jsFiddle

这是设置所有内容的初始化代码:

initializeEnvironment();
initializeDimensions();
initializePhoneGap( function () {
   //start app  
} );

首先我设置window.deviceInfo.

function initializeEnvironment() {
    //window.deviceInfo.type: handheld, tablet, desktop
    //window.deviceInfo.brand: ios, android, microsoft, webos, blackberry
    //window.deviceInfo.mode: browser, standalone, webview
    //window.deviceInfo.mobile: true, false 
    //window.deviceInfo.phonegap: true, false 

    var userAgent = window.navigator.userAgent.toLowerCase();
    window.deviceInfo = {};

    if ( /ipad/.test( userAgent ) || ( /android/.test( userAgent ) && !/mobile/.test( userAgent ) ) ) {
        window.deviceInfo.type = 'tablet';
    } else if ( /iphone|ipod|webos|blackberry|android/.test( userAgent ) ) {
        window.deviceInfo.type = 'handheld';
    } else {
        window.deviceInfo.type = 'desktop';
    };

    if ( /iphone|ipod|ipad/.test( userAgent ) ) {
        var safari = /safari/.test( userAgent );
        window.deviceInfo.brand = 'ios';
        if ( window.navigator.standalone ) {
            window.deviceInfo.mode = 'standalone';
        } else if ( safari ) {
            window.deviceInfo.mode = 'browser';
        } else if ( !safari ) {
            window.deviceInfo.mode = 'webview';
        };
    } else if ( /android/.test( userAgent ) ) {
        window.deviceInfo.brand = 'android';
        window.deviceInfo.mode = 'browser';
    } else if ( /webos/.test( userAgent ) ) {
        window.deviceInfo.brand = 'webos';
        window.deviceInfo.mode = 'browser';
    } else if ( /blackberry/.test( userAgent ) ) {
        window.deviceInfo.brand = 'blackberry';
        window.deviceInfo.mode = 'browser';
    } else {
        window.deviceInfo.brand = 'unknown';
        window.deviceInfo.mode = 'browser';
    };
    window.deviceInfo.mobile = ( window.deviceInfo.type == 'handheld' || window.deviceInfo.type == 'tablet' );
};

然后我调整大小viewport以及任何其他需要它的东西。移动设备使用window.innerWidth and window.innerHeight占据全屏。

function initializeDimensions() {
    var viewport = document.getElementById( 'viewport' );
    if ( window.deviceInfo.mobile ) {
        viewport.style.width = window.innerWidth + 'px';
        viewport.style.height = window.innerHeight + 'px';
    } else {
        //requirements for your desktop layout may be different than full screen
        viewport.style.width = '300px';
        viewport.style.height = '300px';
    };
    //set individual ui element sizes here
};

最后,我用window.device(请注意,这与deviceInfo我创建的对象)来验证phonegap是否可用并准备好。而不是依赖挑剔deviceready事件,当我的代码在设备上运行时,我会轮询该对象should正在运行phonegap。当。。。的时候initializePhoneGap()调用回调后,应用程序已准备好启动。

在整个应用程序中,我将phonegap功能包装在if( window.deviceInfo.phonegap ) {}.

function initializePhoneGap( complete ) {
    if ( window.deviceInfo.brand == 'ios' && window.deviceInfo.mode != 'webview' ) {
        window.deviceInfo.phonegap = false;
        complete();
    } else if ( window.deviceInfo.mobile ) {
        var timer = window.setInterval( function () {
            if ( window.device ) {
                window.deviceInfo.phonegap = true;
                complete();
            };
        }, 100 );
        window.setTimeout( function () { //failsafe
            if ( !window.device ) { //in webview, not in phonegap or phonegap failed
                window.clearInterval( timer );
                window.deviceInfo.phonegap = false;
                complete();
            };
        }, 5000 ); //fail after 5 seconds
    } else {
        window.deviceInfo.phonegap = false;
        complete();
    };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phonegap 代码作为 Web 应用程序 的相关文章

  • 在 IOS9 中的 Cordova 应用程序上使用 JQuery/Javascript 的 window.history 问题

    我在 IOS9 测试版 下使用 Cordova 应用程序时遇到问题 我正在使用最新的 Cordova 和 JQuery 移动版本 window history 未更新 导致以下故障 window history go 1 无法返回页面 即使
  • 当应用程序处于后台时,phonegap-plugin-push on("notification") 事件不会触发

    我正在 Ionic2 中使用以下插件进行推送通知 http ionicframework com docs native push http ionicframework com docs native push 预期行为 当应用程序关闭并
  • 没有提示为 Cordova Windows 应用程序签署证书

    我正在尝试使用命令行工具创建和安装 Cordova Windows 应用程序 跑步时cordova run windows device shell 显示此文本 Before installing this app you need to
  • Android - 如何在 Android WebView 中使用 Javascript?

    我的混合 Android 应用程序遇到问题 我需要一个带有 HTML 的 WebView 在这个 HTML 中我有一个按钮 我有一个带有 WebView 的布局 并且 HTML 中有一个按钮 当用户单击此按钮时 我尝试使用另一个屏幕 也是带
  • 如何制作具有移动外观的 emberjs 应用程序(如 jquery mobile 中的应用程序)?

    我有一个使用 Emberjs 的简单移动 Web 应用程序项目 对于外观和感觉 我想要类似于 JQuery Mobile 的东西 有没有办法混合使用 Emberjs 和 jquery mobile 如果是这样 怎么办 我查看了 Travis
  • 既然 Gradle 和 Maven 都弃用了 http,如何使用 Liferay Mobile SDK 6.2.18 生成 jar 库?

    在我当前的项目中 我们正在维护 开发使用客户网站 liferay 6 2 服务的移动 android iOS 应用程序 每当后端的人员生成新服务 或者只是将现有服务更新为具有新功能的新版本 时 我们需要使用 Liferay Mobile S
  • jQuery 在 taphold 事件后调用 click 事件

    我正在使用 Jquery 和 Jquery Mobile 开发适用于 Android 的 PhoneGap 应用程序 我有一个项目列表 需要将两个事件绑定到列表中的每个项目 我需要一个 taphold 事件和一个 click 事件 我遇到的
  • 如何在phonegap上使用GCM处理android中的多个推送通知

    当推送通知到达时 如果用户无法查看该通知 他收到另一条通知 之前的通知正在更新为新的 但它不应该更新为最新的 我们需要单独显示每个通知 这可以使用 GCM 吗 我已经使用Phonegap来开发应用程序 PushPlugin 支持在有效负载中
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • FileReader 在 Ionic 2 中未触发 onloadend

    我正在尝试使用 cordova file plugin 读取本地文件 目前我可以读取本地目录的内容并选择单个文件 但我在获取文件内容时遇到问题 这是我的函数 从列表中选择文件后单击按钮即可调用该函数 import window resolv
  • 无法在cordova项目中安装插件

    我面临一个大问题 Unable to install the phonegap plugins在我的科尔多瓦项目中 实际上昨天它仍然工作正常 现在 每当我尝试在我的 cordova 项目中使用 CLI 添加任何 cordova 插件时 我收
  • 三星特定的网络视图问题

    我有一个phonegap应用程序 可以在Chromium和原生的 纯粹的Android浏览器WebView中无缝运行 三星修改的 Android 浏览器中的某些内容破坏了我的应用程序 而且我一生都找不到描述三星浏览器差异的资源 该线程似乎相
  • 根据外形尺寸更改入口点类别

    如果用户从移动 Web 浏览器或桌面 Web 浏览器访问 我希望在我的 GWT 应用程序中加载不同的用户界面 我想知道如何编辑我的 Application gwt xml 文件 更改根据外形规格加载哪个入口点类 我认为这可能是这样的 但我只
  • 有没有办法获取 Android 扩展文件中特定文件的 Url?

    我正在构建一个 PhoneGap 应用程序 其中包含大型音频和视频文件 在 Android 中 媒体文件应位于扩展文件中 以使应用程序大小保持在 Google Play 50 MB 限制以下 我目前正在考虑两种播放视频文件的方法 将所需的视
  • UWP 应用程序在与商店关联后崩溃

    我正在为 Windows 创建一个 cordova 应用程序 将应用程序与商店关联后 应用程序起始页变为白色空白 如果应用程序使用包标识名称 com something moretext 则该应用程序可以正常工作 但我的商店包身份名称是 5
  • 使用 Ionic/angularjs 打开图片库

    如何使用 Ionic angularjs 访问图片库 我只想在每次单击按钮时打开图片库 这怎么可能 您可以使用cordova相机插件 cordova 插件添加 org apache cordova camera 插件参考 https git
  • Cordova + android:无法从应用程序打开拨号盘或邮件意图

    我有一个奇怪的问题 我无法从应用程序中打开带有预定义号码或邮件意图的拨号盘 我正在使用 netbeans 8 0 1 创建 cordova 应用程序 我的 Cordova 版本是 4 0 0 我按照步骤创建了一个应用程序 并选择了 Hell
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • 寻找网站测试自动化的方法

    我们开发定制调查网站 我正在寻找一种方法来自动化这些网站的模式测试 调查通常包含许多复杂的规则和分支 这些规则和分支也会根据项目的响应方式而触发 所有调查在发布给客户之前都经过严格测试 此测试需要大量的手动工作 我想了解一些可以通过回答问题

随机推荐

  • UserControl 中嵌套 DataGrid 中的 WPF SelectedItem 属性

    I have UserControl 我们称其为CustomDataGrid 其中包含DataGrid 剩下的内容并不重要 SelectedItem的财产DataGrid必须是SelectedItem的财产CustomDataGrid 我希
  • find不为空时如何显示true

    我对 bash 很陌生 我上周才开始学习 我正在尝试搜索文件名 如果找到文件 如何显示消息 这就是我所拥有的 但它一直说 不 echo Enter a file name read findFile if n find HOME type
  • JavaFX XYChart 对数图

    我有一个 XYChart 将数据绘制为 Y 轴上的线性步骤 我想绘制为对数或半对数 Y 刻度 如何更改我的以下代码 public class BaseXYChart extends Application Override public v
  • CollectionView 流程布局自定义

    我正在制作一个个人资料图片集合视图 就像火种编辑个人资料图片一样 我想要第一个单元格比其他单元格大 除了第一个单元格之外还有 2 3 个单元格 其他单元格应该像 3 4 5 有什么建议吗 extension ViewController U
  • 保存的图像未显示在画廊颤振中

    我创建了一个在外部目录中创建文件夹的函数 之后 我从互联网下载图像并将其保存到 图库图像 文件夹中 图像正在保存在文件夹中 但在厨房中不可见 我错过了什么吗 Code void createFolder async String direc
  • SQL Server 中奇怪的日期时间行为

    declare data datetime set data 2011 01 01 23 59 59 999 select data 结果是 2011 01 02 00 00 00 000 第二个例子 declare data dateti
  • 部署 aurelia.cli 构建的应用程序

    我已经构建了一个没有后端的简单 aurelia 网页 现在我有兴趣投入生产 我使用 Aurelia cli 进行捆绑 希望这会很简单 但我不确定如何继续 我应该将哪些文件上传到服务器才能使网站正常运行 谢谢您的帮助 简而言之 au buil
  • 将访问文件读入数据集中

    有没有一种简单的方法可以将整个 Access 文件 mdb 读入 NET 特别是 C 或 VB 中的数据集 或者至少从访问文件中获取表列表 以便我可以循环遍历它并将它们一次添加到数据集中 感谢您的建议 我能够使用这些示例来组合此代码 这似乎
  • jersey RESTful & shiro & oAuth 教程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个好的 jersey shiro oAuth 教程来保护我的资源 任何提示都会很棒 我写了
  • 地图视图上的虚线

    我可以使用下面的代码 无论如何 在两点之间相当容易地创建一条线 无论如何 我怎样才能使线变成虚线而不是实线 另外 线条越长 是否可以改变不透明度 MKOverlayRenderer mapView MKMapView mapView ren
  • 升级到 RC 后,创建多对多关系的实体失败

    我有一个项目 其中包含 3 个简单的表 几个 POCO 类以及一个使用代码创建的 DBContext 没有 edml 文件 以下代码设置用于使用实体框架代码优先的测试版 自从模型构建器从测试版更改为 RC 以来 我编辑了 DbContext
  • T-SQL - 跟踪一段时间内的发生情况

    我有一些数据ValidFrom and ValidTo与其相关的日期 简单来说 MembershipId ValidFromDate ValidToDate 0001 1997 01 01 2006 05 09 0002 1997 01 0
  • AngularJS如何动态地将列表拆分为多列

    我有许多 li 项目 我希望它们均匀分布在 3 个不同的列中 所以我需要列表项的前三分之一显示在第一个 ul 中 接下来的三分之一显示在第二个 ul 中 等等 正确知道我的方法有点静态 ul class small 12 medium 4
  • 使用 Excel 宏传递变量以完成句子

    我是 Excel 宏的新手 如果我问了什么愚蠢的问题 请纠正我 我想在 Excel 工作表中打印以下 CALL 语句 其中 SCHEMA NAME PROCEDURE NAME INPUT DATE EXIT DATE 将被参数化 并且我想
  • 将附加文件添加到 VSTS 发布到 azure web 应用程序

    我在 VSTS 中有一个版本可以将我的 web 应用程序部署到 azure 应用程序服务 为此 我使用 Azure 应用服务部署步骤 在正常部署 web 应用程序后 我想从另一个构建结果中添加额外的 zip 工件 我只想将这些文件复制到 a
  • 将 HTML5 画布转换为 SVG 的方法?

    我需要将 HTML5 画布转换为 SVG 进行编辑 我怎样才能实现这个目标 Try canvas2svg js https github com gliffy canvas2svg Demo http gliffy github io ca
  • RStudio Shiny 动态选择

    在我的 RStudio Shiny 中 我得到了我的selectInput在我里面server R 以及关于ui R我有一个tags语句来更改选择框的宽度和高度 它在页面加载时起作用 但当我进入单一类型时它会恢复为默认大小 有什么想法如何解
  • 您正在使用 X509TrustManager 的不安全实现

    我在 Google Play 中有一个应用程序 今天我收到一封来自 Google 的邮件 内容如下 Google Play 警告 您正在使用不安全的实现 X509信任管理器 它介绍了有关 SSL 证书问题以及解决该问题的方法 我是出于好奇才
  • Swift - 使用 CGContext 用手指绘图

    我正在尝试制作一个绘图应用程序 我有一个自定义 UIView class DrawView UIView var touch UITouch var lastPoint CGPoint var currentPoint CGPoint ov
  • Phonegap 代码作为 Web 应用程序

    我正在考虑重新使用我的phonegap html css 和js 代码作为网络应用程序 我将仔细检查并删除所有仅限移动设备的功能 目的是拥有一个提供一些移动应用程序功能的网络应用程序 我目前使用的移动设备功能很少 但我猜维护我的移动应用程序