原文链接:http://blog.csdn.net/lovelyelfpop/article/details/50735395

我相信。应该会有一些cordova开发人员想过实现以下这种app:

使用cordova制作一个外壳app。用于浏览服务端部署的站点,这样当server上站点升级后,这个cordova app能够马上訪问最新版。而不是每次改了一点点功能都要打包上架app。

我近期也在实现这种功能。由于站点是在远端server上,而cordova.js、cordova_plugins.js和上全部cordova插件的js是在app安装包里内置的(打包外壳app的时候已经加入的大部分插件)。所以我在远端站点的index.html上加入以下的js引用,来载入cordova插件:

<script src="file:///android_asset/www/cordova.js" type="text/javascript" charset="UTF-8"></script>

只是遇到了一个错误:

Not allowed to load local resource: file:///android_asset/www/cordova.js

意思是http协议下禁止通过file://方式訪问本地的文件。

只是假设cordova app就是訪问的file://android_asset/www/index.html的话。载入其他file://资源是没问题的。

这是webview的一种安全机制。

解决的方法是,通过拦截webview的请求,实现载入本地js,详细例如以下:

1、打开CordovaLib\src\org\apache\cordova\engine\SystemWebViewClient.java,按下图加入代码

private static final String INJECTION_TOKEN = "http://injection/";
        if(url != null && url.contains(INJECTION_TOKEN)) {
String assetPath = url.substring(url.indexOf(INJECTION_TOKEN) + INJECTION_TOKEN.length(), url.length());
try {
WebResourceResponse response = new WebResourceResponse(
"application/javascript",
"UTF8",
view.getContext().getAssets().open(assetPath)
);
return response;
} catch (IOException e) {
e.printStackTrace(); // Failed to load asset file
return new WebResourceResponse("text/plain", "UTF-8", null);
}
}

注意:假设你用了cordova-plugin-crosswalk-webview插件。则须要打开

cordova-plugin-crosswalk-webview\platforms\android\src\org\crosswalk\engine\XWalkCordovaResourceClient.java

改动shouldInterceptLoadRequest方法。

2、再把在index.html中的cordova.js的引用路径换成以下的:

<script src="http://injection/www/cordova.js" type="text/javascript" charset="UTF-8"></script>

思路是:既然不同意訪问file://。那我就设法改为http://。然后拦截webview的请求,对http://injection/开头的请求,手动返回相应文件的详细内容。

这样,又一次打包后的cordova app就攻克了訪问远端站点时,载入本地js报错的问题了。

临时仅仅攻克了Android上的Not allowed to load local resource,iOS还没研究。

欢迎加入Sencha Touch + Phonegap交流群

1群:

idkey=d578312312c7dd1a7cbf0f7b7080a40feb21843740c29e2e5588f1987e95267a" style="color:rgb(202,0,0);text-decoration:none;">194182999 (满)

2群:

idkey=880bc64743eb2c91b5acaf22c73b2124ac0df5f852fe28963b635c9d95c34c3f" style="color:rgb(202,0,0);text-decoration:none;">419834979

共同学习交流(博主QQ:479858761

[Phonegap+Sencha Touch] 移动开发76 让cordova app訪问远端站点也能调用cordova插件功能的更多相关文章

  1. [Phonegap+Sencha Touch] 移动开发36 Phonegap/Cordova项目的图标和启动画面(splashscreen)配置

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/40780111 Phonegap/Cordova项目中的config.xml文件.里面配 ...

  2. [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/50848524 插件地址:https://github.com/nordnet/cord ...

  3. [Phonegap+Sencha Touch] 移动开发29 安卓navigator.camera.getPicture得到图片的真实路径

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/38313021 phonegap的拍照插件选择图库中的图片.代码例如以下: naviga ...

  4. [Phonegap+Sencha Touch] 移动开发19 某些安卓手机上弹出消息框 点击后不消失的解决的方法

    Ext.Msg.alert等弹出框在某些安卓手机上,点击确定后不消失. 原因是: 消息框点击确定后有一段css3 transform动画,动画完毕后才会隐藏(display:none). 有些奇葩手机 ...

  5. [Phonegap+Sencha Touch] 移动开发72 List列表横向滑动操作(仿QQ列表滑动删除)

    原文链接:http://blog.csdn.net/lovelyelfpop/article/details/50425744 本插件有2个版本号:sencha touch 版本号和 extjs6 m ...

  6. [Phonegap+Sencha Touch] 移动开发34 gem安装compass,不编译scss,怎么办?

    很多人已经发现,今天,该命令 "gem install compass" 安装compass,正在使用 "compass compile" 编scss的时间将报 ...

  7. [Phonegap+Sencha Touch] 移动开发24 包wp8.1的App,弹出软键盘输入框聚焦实施后,无移动采收率方法来解决接口

    这种现象不仅是现在显示phonegap包sencha touch的wp8.1该程序将出现(只wp8.1,wp8正常).其他js我测试了几个框架(app framework, jquery mobile ...

  8. [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,执行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决的方法

    这个现象仅仅出如今phonegap打包sencha touch的wp8.1程序会出现(仅wp8.1,wp8正常),其他js框架我測试了几个(app framework, jquery mobile), ...

  9. [Phonegap+Sencha Touch] 移动开发26 Android下的sencha touch程序,转屏时,Ext.Viewport不能触发orientationchange事件的解决的方法

    Sencha touch 2.4.2 已经解决问题了. 比方你为Ext.Viewport的orientationchange事件加入了一个监听方法: Ext.Viewport.on('orientat ...

随机推荐

  1. DNS隧道和工具

    DNS Tunneling及相关实现 转自:http://www.freebuf.com/sectool/112076.html DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DN ...

  2. TFRecord —— tensorflow 下的统一数据存储格式

    tensorflow 提供了统一的数据存储格式,即 TFRecord(record 表示记录),以提高程序的可扩展性,当数据来源十分复杂时,仍能有效记录输入数据中的信息. 1. tfrecord 使用 ...

  3. 安装SQL2008后需要打开的端口为 1433,4630

  4. python3之开发环境PyCharm配置

    1. 安装PyCharm(安装时注意选择python),地址: https://www.jetbrains.com/pycharm/ 2. 安装python 地址: https://www.pytho ...

  5. AngularJS实现cookie跨域

    前后端分离被越来越多的公司重视利用.然后带来的最棘手的问题就是.用户信息应怎样保存. 一.场景描写叙述 以Java为后台,AngluarJS做前端为例进行描写叙述:当用户在界面登录时.需把用户信息(如 ...

  6. 马上运行函数-$(function(){})篇

    QQ:1187362408 欢迎技术交流和学习 马上运行函数-$(function(){})篇(jquery): TODO: 1.jquery:jQuery(function($){ }) 与 $(d ...

  7. Android圆形图片不求人,自定义View实现(BitmapShader使用)

    在很多APP当中,圆形的图片是必不可少的元素,美观大方.本文将带领读者去实现一个圆形图片自定View,力求只用一个Java类来完成这件事情. 一.先上效果图 二.实现思路 在定义View 的onMea ...

  8. mvn本地执行java程序

    mvn -f pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCo ...

  9. 搭建并配置本地GitLab服务器教程

    由于工作单位不一定能够方便使用外部网络,现以下载rpm包来搭建一套本地GitLab服务器. 1. 系统准备 系统:redhat 7.3 2. 下载所需安装包 去官网下rpm包,下载地址,ce是免费的社 ...

  10. lastb---显示用户错误的登录列表

    lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常.单独执行lastb命令,它会读取位于/var/log目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显 ...