在PhoneGap中打开浏览器中的链接(使用非本地index.html根目录)

3
我看到了一些关于如何在浏览器中打开链接而不是 WebView 的讨论,例如这个Phonegap的官方文档。但我试着用这两种方法都无法实现目标,我猜想这是因为我加载的 URL 不是本地的 index.html 文件。我的设置如下:
我正在加载一个 URL: www.example.com。我希望所有的 www.non-example.com 链接在浏览器中打开,而所有子链接则在 WebView 中加载。我已经编辑了 cordova.xml 文件。
<access origin="http://www.example.com"/>

但是当我输入一个带有

的URL时,
<a href="http://www.non-example.com" target="_blank">Foo</a>

当我在我的Android设备中点击它时,它只是在WebView中打开,而不是浏览器。我不知道这是否相关,但我更新了我的PhoneGap到2.2版本,并且添加了一个与我的index.html同级别的config.xml文件(尽管我不确定它是否被使用,因为我没有从头开始重新创建我的Android项目)。所以我的问题归结为以下两个:
1)如果我正在使用非本地的index.html,如何确保URL在浏览器中打开?
2)我如何知道我的config.xml文件是否被使用?
2个回答

0

我刚刚尝试了你描述的方法,使用Cordova 2.3可以正常工作。

1)

你确定已经删除了其他冲突的访问规则吗?例如默认规则(access origin=".*")- 最宽松的规则优先。

2)

在重新构建项目之前清理一下,以确保使用更新后的config.xml文件。

如果您想强制执行精确的行为,可以始终使用插件和本地代码,但对于打开浏览器来说,这可能有些过度。


是的,我在访问方面没有其他规则。你是否使用非本地的index.html加载它了? :) 我一直在想这是否会引起问题。 - Waynn Lue
@Waynn - 我试过的链接是指向一个非本地(外部)网站。 - robert
嗯,我刚在 Cordova 2.5 上测试了一下,似乎无法使其正常工作。我在 config.xml 中唯一没有注释的规则是 <access origin="http://foo.example.com"/><content src="http://foo.example.com" />。但是当我有一个指向 amazon.com 的链接时,它仍然在 WebView 中打开,而不是浏览器中打开。 - Waynn Lue

0

这里似乎有一个被接受的答案在这里。大意是你可以调用navigator对象并告诉它打开一个链接,传递一个参数{external: true}。虽然我没有测试过,祝你好运!


是的,我知道你可以使用navigator对象,但PhoneGap的文档(https://build.phonegap.com/blog/access-tags)暗示你只需使用_target="blank"就可以工作。 - Waynn Lue
嗯。链接上说“我们已经尝试通过在支持默认白名单的每个平台(Android、iOS和BlackBerry)上设置通配符来减轻这个问题。”。我要问一个显而易见的问题:通配符不再在你的config.xml中了,是吗?apk只是一个jar文件。您可以使用 java jar -xf <file>.apk 并检查res目录,以查看config.xml是否实际上是您的xml文件。 - nsg
APK包中是否确实有您的自定义config.xml文件,有没有任何更新? - nsg
我使用了 jar -xf <file>.apk 命令,看起来它正在使用原始的 res/xml/config.xml 文件。如果我在 res/xml 和 assets/www 中都定义了 config.xml,它们都会被使用吗?还是其中一个会覆盖另一个? - Waynn Lue
当您在本地编译PG应用程序时,需要将config.xml放入res/xml文件夹中。而对于使用PGBuild的情况,则需要将config.xml放入assets/www文件夹中,因为在上传网站时并没有访问原生项目的权限。我的猜测是,assets/www/config.xml会被移动到res/xml/config.xml,以保持本地和PGBuild编译的一致性。基于此,我认为应用程序正在使用默认的config.xml文件,这就导致了问题的出现。 - nsg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接