在PhoneGap应用中,我们可以使用以下代码设置起始页。
self.viewController.wwwFolderName = @"www";
self.viewController.startPage = @"index.html";
但如果我想将参数传递给该页面,它将无效。
self.viewController.startPage = @"index.html?parameter=abc";
会导致NSURLErrorRedirectToNonExistentLocation
错误。
是否有一种简单的方法可以将参数传递给本地页面?
答案 0 :(得分:6)
在phonegap应用程序中,您无法通过向其传递参数来调用本地页面,因为系统会搜索与您传递的名称完全相同的文件。它不会将参数视为查询字符串。
Ex: when you say "index.html?param=abc", instead of calling page index.html with a
parameter called param having value abc. It calls the page "index.html?param=abc"
which doesn't exist in the system. Hence, the error.
解决此问题的最佳方法是将参数保存为调用页面中的本地存储,在下一页中使用它们并销毁它们。
Ex: In your calling JavaScript file, use:
window.localStorage.setItem('param', 'abc');
Now, in your called file, access the local storage and delete it
param abc = window.localStorage.getItem('param');
window.localStorage.removeItem('param');
希望有所帮助。
答案 1 :(得分:1)
编辑:适用于Cordova& Phonegap apps这个插件很有用http://goo.gl/TWN8wq所以你不必自己手动修改Android清单或iOS plist文件。
还有一个优点是能够在两个平台上使用相同的handleOpenURL()
功能(你不能没有插件,handleOpenURL()
只会是iOS的东西)
无论如何,手动:
要实现您的目标,您必须:
1 - 在xCode中注册自定义方案(如HelloWorld)和自定义网址(如customurl
)
2 - 在页面上放置一个链接,如<a href=”HelloWorld://customurl/username=James Bond”>HelloWorld</a>
3 - 使用函数username
获取参数handleOpenURL
的值,用于Phonegap&lt; 3.0或OpenURL
用于Phonegap 3+,例如:
function handleOpenURL(url) {
//Here we can parse the url .
var link = url.split(‘=’);
var username = link[1];
alert(username);
}
有一个完整的教程如何做here(iOS),这是我从中获取的所有内容。
对Sourabha Kumar Sahoo的信用
答案 2 :(得分:0)
如果我是你,我会通过您将创建的插件方法将所有信息传递给javascript(即plugin.GetQueryString())您可以创建一个通用插件方法,将所有查询参数返回为一个字符串,然后您可以使用以下方法在javascript中处理它:
function getQueryParams(qs) {
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
window.$_GET = getQueryParams(plugin.GetQueryString());
因此,您将获得一个很好的数据结构,其中包含您可以按名称访问的所有GET参数。