如何将parameter passing给PhoneGap应用程序中的本地页面?
在PhoneGap应用程序中,我们可以使用以下代码设置起始页面。
self.viewController.wwwFolderName = @"www"; self.viewController.startPage = @"index.html";
但是如果我想传递参数到这个页面,它将不起作用。
self.viewController.startPage = @"index.html?parameter=abc";
这将导致NSURLErrorRedirectToNonExistentLocation
错误。
有没有简单的方法来传递参数到本地页面?
在phonegap应用程序中,您不能通过传递参数来调用本地页面,因为系统会search与您传递的名称完全相同的文件。 它不会将参数视为查询string。
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');
希望有所帮助。
编辑:对于cordova和Phonegap应用这个插件是有用的http://goo.gl/TWN8wq,所以你不必自己动手修改Android清单或iOS plist文件。 在这两个平台上也可以使用相同的handleOpenURL()
函数(不能没有插件, handleOpenURL()
只是一个iOS的东西)
无论如何,手动:
要达到你想要的,你必须:
1 – 在customurl
中注册一个自定义scheme(如HelloWorld)和自定义url(如customurl
)
2 – 在页面上放置一个链接,如<a href=”HelloWorld://customurl/username=James Bond”>HelloWorld</a>
3 – 使用phonegap <3.0的函数handleOpenURL
或Phonegap 3+的OpenURL
获取参数username
的值,如:
function handleOpenURL(url) { //Here we can parse the url . var link = url.split('='); var username = link[1]; alert(username); }
有一个关于如何做到这一点 (iOS)的完整教程,这是我从哪里采取的一切。
学分到Sourabha库马尔Sahoo
如果我是你,我只是通过一个你会创build的插件方法(即plugin.GetQueryString())将所有的信息传递给JavaScript)你可以创build一个通用的插件方法,将所有的查询参数作为一个string返回,然后你可以用下面的方法在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参数。