2

在 PhoneGap 应用程序中,我们可以使用以下代码设置起始页面。

self.viewController.wwwFolderName = @"www";
self.viewController.startPage = @"index.html";

但是如果我想将参数传递给该页面,它将不起作用。

self.viewController.startPage = @"index.html?parameter=abc";

它会导致NSURLErrorRedirectToNonExistentLocation错误。

有没有一种简单的方法可以将参数传递到本地页面?

4

3 回答 3

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');

希望有帮助。

于 2013-04-03T12:59:58.823 回答
1

编辑:对于 Cordova 和 Phonegap 应用程序,这个插件很有用http://goo.gl/TWN8wq所以你不必自己手动修改 Android 清单或 iOS plist 文件。还有一个优势是能够handleOpenURL()在两个平台上使用相同的功能(你不能没有插件,handleOpenURL()这只是 iOS 的东西)

无论如何,手动:

为了实现你想要的,你必须:

customurl1 -在 xCode 中注册自定义方案(如 HelloWorld)和自定义 url(如)

2 - 在页面上放置一个链接,例如<a href=”HelloWorld://customurl/username=James Bond”&gt;HelloWorld</a>

3 -使用Phonegap < 3.0 或Phonegap 3+username的函数获取参数值,例如:handleOpenURLOpenURL

function handleOpenURL(url) {

                    //Here we can parse the url .

                    var link = url.split(‘=’);

                    var username = link[1];

                    alert(username);

}

这里有一个关于如何做的完整教程(iOS),这是我从中获取所有内容的地方。

归功于 Sourabha Kumar Sahoo

于 2014-08-07T15:37:03.723 回答
0

如果我是你,我会通过你将创建的插件方法(即 plugin.GetQueryString() )将所有信息传递给 javascript 你可以创建一个通用插件方法,它将所有查询参数作为字符串返回,然后您可以使用以下方法在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 参数。

于 2013-11-04T21:01:34.640 回答