[Phonegap+Sencha Touch] 移动开发76 让cordova app訪问远端站点也能调用cordova插件功能
2018-01-24 13:45
681 查看
原文链接: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插件:
只是遇到了一个错误:
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,按下图加入代码
注意:假设你用了cordova-plugin-crosswalk-webview插件。则须要打开
cordova-plugin-crosswalk-webview\platforms\android\src\org\crosswalk\engine\XWalkCordovaResourceClient.java
改动shouldInterceptLoadRequest方法。
2、再把在index.html中的cordova.js的引用路径换成以下的:
思路是:既然不同意訪问file://。那我就设法改为http://。然后拦截webview的请求,对http://injection/开头的请求,手动返回相应文件的详细内容。
这样,又一次打包后的cordova app就攻克了訪问远端站点时,载入本地js报错的问题了。
临时仅仅攻克了Android上的Not allowed to load local resource,iOS还没研究。
欢迎加入Sencha Touch + Phonegap交流群
1群:194182999 (满)
2群:419834979
共同学习交流(博主QQ:479858761)
我相信。应该会有一些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群:194182999 (满)
2群:419834979
共同学习交流(博主QQ:479858761)
相关文章推荐
- [Phonegap+Sencha Touch] 移动开发76 让cordova app访问远端网站也能调用cordova插件功能
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自动更新App的Web内容
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- [Phonegap+Sencha Touch] 移动开发70 cordova app中使用增强的webview
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- [Phonegap+Sencha Touch] 移动开发61 使用 URL Schemes实现一个App启动另一个App的功能
- [Phonegap+Sencha Touch] 移动开发64 Phonegap/Cordova 插件开发
- [Phonegap+Sencha Touch] 移动开发69 Phonegap/Cordova、Sencha touch的一些官方文档、博客、说明地址
- [Phonegap+Sencha Touch] 移动开发67 安卓实现 新版提示更新并下载安装(自动更新插件)
- [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法
- [Phonegap+Sencha Touch] 移动开发31 使phonegap的inappbrowser插件支持通过手机返回键进行历史记录后退
- [Phonegap+Sencha Touch] 移动开发63 PhoneGap和Cordova的区别
- [Phonegap+Sencha Touch] 移动开发53 Cordova/Phonegap 4(或5) 多了什么?
- [Phonegap+Sencha Touch] 移动开发30、phonegap的camera插件的几个问题
- [Phonegap+Sencha Touch] 移动开发10 调用focus方法使输入框获得焦点,不弹出软键盘的解决方法
- [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,执行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决的方法
- [Phonegap+Sencha Touch] 移动开发24 打包wp8.1的App,运行时输入框聚焦弹出软键盘之后,界面上移而不恢复原位的解决办法
- [Phonegap+Sencha Touch] 移动开发15 phonegap/cordova 3.4.0 编译异常:a is not defined 解决办法
- [Phonegap+Sencha Touch] 移动开发36 Phonegap/Cordova项目的图标和启动画面(splashscreen)配置