如何处理Phonegap + JQM应用程序中的链接
How to handle links in Phonegap + JQM app?
我正在用Phonegap和jQuerymobile构建一个应用程序。该应用程序大致是这样工作的:
1)该应用程序从公共服务器下载ZIP文件,然后将其解压缩到本地文件夹。我从fileSystem.root.toNativeURL()
那里获得了本地文件夹路径(在操作系统中,它是这样的:file://var/mobile/Container/Data/Application/xxxx/Documents/
2) 应用程序重定向到在本地文件夹中解压缩的 HTML(例如:file://var/mobile/Container/Data/Application/xxxx/Documents/index.html
)
我现在在索引.html文件内遇到b/c问题,所有链接都是绝对路径(例如:<a href="/content/index2.html">Link</a>
)。这会断开所有链接,因为(我假设)它们现在都指向file://content/index2.html
而不是file://var/mobile/Container/Data/Application/xxxx/Documents/content/index2.html
。
我的问题是,我应该如何处理链接?我想我应该重写所有链接以强制在其前面添加本地文件夹 URL。有没有更好的方法?
如果重写链接是要走的路,我如何使用jQuerymobile做到这一点?我在jQuery中做了这个,它似乎 http://jsfiddle.net/jg4ouqc5/工作,但这段代码在我的应用程序中不起作用(jQueryMobile)
当你加载index.html时,你会得到file://some_path/..../index.html作为你的基本URL。现在在自己的病房中遇到的任何链接都可以相对于基本URL进行解析。
你会更了解你的场景。可以通过多种方式解决此问题。
-
与CMS/代码生成器签订合同。链接应始终生成"相对于基本 URL"或"绝对"。您在页面中获得的链接是错误的 -
<a href="/content/index2.html">Link</a>
理想情况下它应该是<a href="content/index2.html">Link</a>
或完全合格的,就像https://www.google.com
一样。 -
如果要更改URL,则可以在解压缩内容后使用本机代码进行更改。这将是非常直接的。
-
如果要在浏览器中更改URL,则必须保留基本URL,然后处理几件事:
a. 绝对网址 - 在您的情况下,您可以检查 window.location.protocol,如果它以"http"开头,然后跳过它。
B. 子目录
这是我写的一个小:注意:我没有尝试过此代码,您可能需要根据需要进行更改。
$(document).ready(function(){
var base_file_name = window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1);
//In index.html (persist this value in native)
var baseUrl = window.location.href.replace(base_file_name, "");
$("a").each(function () {
this.href = baseUrl + this.pathname;
$(this).click(function (e) {
e.preventDefault();
alert(this.pathname);
window.location.href = this.href;
});
});
});
您链接的示例应该有效,请确保您正确设置了<base>
并且使用正确的字符串进行替换。
是的,当您的页面加载时,您必须规范化所有URL。 我现在无法使用 phonegap 进行测试,但您的basePath
需要是以下之一:
- 您在答案中描述的文件路径(不太可能)
-
window.location.origin
(可选包括window.location.pathname
)
法典:
// mini dom ready - https://github.com/DesignByOnyx/mini-domready
(function(e,t,n){var r="attachEvent",i="addEventListener",s="DOMContentLoaded";if(!t[i])i=t[r]?(s="onreadystatechange")&&r:"";e[n]=function(r){/in/.test(t.readyState)?!i?setTimeout(function(){e[n](r)},9):t[i](s,r,false):r()}})
(window,document,"domReady");
domReady(function () {
var anchors = document.getElementsByTagName['a'],
basePath = /* get your base path here, without a trailing slash */;
Array.prototype.forEach.call(anchors, function( anchor ){
anchor.setAttribute('href', basePath + anchor.getAttribute('href'));
});
});
删除链接开头的正斜杠。
href="content/index2.html">
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 将文件从应用程序文件夹复制到JQM/Phonegap应用程序中的根文件夹
- 如何处理Phonegap + JQM应用程序中的链接
- 捏合以缩放 JQM/Phonegap 应用程序中的图像
- 为什么在我的JQM应用程序中定向改变事件从未被触发