IBM Worklight 6.0 - BlackBerry 10 中的 window.open() 失败

Posted

技术标签:

【中文标题】IBM Worklight 6.0 - BlackBerry 10 中的 window.open() 失败【英文标题】:IBM Worklight 6.0 - window.open() fails in BlackBerry 10 【发布时间】:2013-09-25 23:30:40 【问题描述】:

我在 Worklight 5 中可以使用此功能,但我似乎无法使其在 V6 中使用。

我正在尝试在 BlackBerry 10 上的 Worklight 应用程序中使用 Cordova InAppBrowser。我的代码很简单:

window.open(link, "_blank", "location=no");

这适用于 androidios,但是当我在 Blackberry 10 模拟器上运行它时,我在控制台日志中收到以下错误:

POST http://localhost:8472/org.apache.cordova/isWhitelisted 404 (OK) 

我的应用的 config.xml 包括:

<access subdomains="true" uri="*" />

所以所有链接都应该列入白名单,但404似乎是供API调用检查链接是否列入白名单,而不是打开链接的调用。

如果我使用 cordova.js 从 open() 的实现中删除白名单检查,InAppBrowser 突然工作正常,但是每次构建应用程序时该文件都会被覆盖,因此无法自定义它。

我是否缺少一些使这项工作所需的配置?

【问题讨论】:

【参考方案1】:

Cordova 似乎从 2.0 更改为 2.3。在 Worklight V5 中,通配符白名单访问有效,但在 BB10 上的 V6 中,只能将特定域列入白名单。

如果我将我的特定域添加为 config.xml 中的访问元素,window.open() 会突然起作用。看着blackberry documentation,我想我明白为什么了

如果您指定多个元素,则最具体的 使用定义。例如,如果您使用 http://somedomain.com 和 http://specific.somedomain.com,使用 第一个定义(以及在它下定义的任何特征)被忽略。

但这让我想知道通配符访问在 Worklight V5 中是如何工作的(确实如此)同样的规则应该适用于 V5 项目,我在 Cordova 文档中看不到任何更改,但出于某种原因通配符白名单访问在那里有效,但在 Worklight V6 中无效。

无论如何,只要我在 config.xml 中专门指定所有域,我就可以让 window.open() 工作。我还没有找到成功将所有内容列入白名单的方法。我试图删除所有内容,但是:

<access subdomains="true" uri="*" />

(这与我的纯科尔多瓦测试应用程序中的 config.xml 中的内容相匹配)

但随后应用程序无法连接到 Worklight 服务器(不太清楚为什么)

【讨论】:

我在这里遇到了同样的问题。有关解决方案或解决方法的任何更新? 我唯一的解决方法是将所有需要的域显式添加到白名单中。【参考方案2】:

Worklight 6.0 使用 Cordova v2.6,这可能是因为 BlackBerry 10 对 window.open(现在实际上是 InAppBrowser)的支持有所下降。

看看你是否可以根据 Cordova 文档使用它:http://cordova.apache.org/docs/en/2.6.0/cordova_inappbrowser_inappbrowser.md.html

【讨论】:

文档非常简单。 Cordova 2.6 中唯一支持 BB10 的是 window.open()。没有其他 BB 特定的注释。我拼凑了一个纯 Cordova 2.6 BB10 应用程序,window.open() 运行良好。【参考方案3】:

我意识到这个问题已经得到解答,但是您可以添加一个 config.xml 设置,该设置将允许访问任何域,如 here 所记录的那样。

只需添加:

&lt;preference name="WebSecurity" value="disable"/&gt;

到你的 config.xml,你应该很高兴。

【讨论】:

以上是关于IBM Worklight 6.0 - BlackBerry 10 中的 window.open() 失败的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.0 - 访问 Worklight Server 时出错

IBM Worklight 6.0 - Worklight Starter Dojo 示例损坏?

IBM Worklight 6.0 - 如何将 Worklight 应用程序部署到 Worklight Server?

IBM Worklight 6.0 - 无法访问 Worklight 服务器

IBM Worklight 6.0 - 在以下期间发生内部错误:Worklight 应用程序构建器

IBM Worklight 6.0 - 移动浏览器模拟器是不是支持 Worklight 皮肤?