ios打开浏览器plus.runtime.openURL无效

调用第三方程序打开指定的URL:

plus.runtime.openURL( url, errorCB, identity );

参数:
url: ( String ) 必选 要打开的URL地址
字符串类型,各平台支持的地址类型存在差异,参考平台URL支持表。

errorCB: ( OpenErrorCallback ) 可选,打开URL地址失败的回调
打开指定URL地址失败时回调,并返回失败信息。

identity: ( String ) 可选 指定打开URL地址的程序名称
在iOS平台此参数被忽略,在Android平台为程序包名,如果指定的包名不存在,则打开URL地址失败。

plus.runtime.openURL(appInfo.app_open_url, function (res) {
     console.log('openURL', JSON.stringify(res))
})

打印结果:

{"code":-1,"message":"无效的参数"}

ios中地址要求规范,需要转码使用encodeURI()处理一下地址,问题解决

plus.runtime.openURL(encodeURI(appInfo.app_open_url), function (res) {
     console.log('openURL', JSON.stringify(res))
})

另附:Andriod设备跳转第三方应用市场下载软件

mui.plusReady(function () {
       if (plus.os.name === 'Android') {
            let Uri = plus.android.importClass('android.net.Uri')
            let uri = Uri.parse(`market://details?id=com.baidu.BaiduMap`) //id换成自己所需要的
            let Intent = plus.android.importClass('android.content.Intent')
            let intent = new Intent(Intent.ACTION_VIEW, uri)
            let main = plus.android.runtimeMainActivity()
            main.startActivity(intent)
       }
})

### 关于 UniApp 中 `window.open` 方法无响应的问题 在开发基于 UniApp 的应用时,可能会遇到标准浏览器 API 如 `window.open` 无法正常工作的情况。这是因为 UniApp 是一个多端框架,在不同平台上运行时会受到平台特性的限制[^1]。 #### 原因分析 UniApp 应用本质上是一个 WebView 容器驱动的应用程序。对于某些原生功能调用(如 `window.open`),可能不会被支持或者行为表现不一致。具体原因如下: - **WebView 局限性**:部分移动端设备上的 WebView 并未完全实现桌面浏览器的功能集,因此像 `window.open` 这样的方法可能不起作用[^2]。 - **跨端兼容性问题**:由于 UniApp 需要适配多个目标平台(H5、小程序、APP 等),其内部机制会对一些 JavaScript 标准 API 进行拦截或重写,这可能导致这些方法的行为发生改变甚至失效[^3]。 #### 解决方案 ##### 使用 `plus.runtime.openURL` 如果是在 App 端环境下,可以尝试使用 DCloud 提供的 Plus API 来替代 `window.open` 功能。例如通过 `plus.runtime.openURL(url)` 打开外部链接[^4]: ```javascript if (uni.getSystemInfoSync().platform === 'android' || uni.getSystemInfoSync().platform === 'ios') { plus.runtime.openURL('https://example.com'); } else { window.location.href = 'https://example.com'; } ``` 上述代码片段检测当前环境是否为 Android 或 iOS 设备,并分别采用适合的方式跳转页面。 ##### 利用 H5 页面导航方式 如果是针对 H5 场景,则可以直接修改 location 对象来完成页面切换操作: ```javascript location.href = 'https://your-target-url.com'; ``` 这种方式简单有效,适用于纯 HTML5 渲染场景下不需要依赖特定插件的情形[^5]。 ##### 调整到新窗口逻辑至路由管理 当项目主要面向微信小程序或其他非传统 Web 浏览器终端时,建议重新设计业务流程,利用框架内置的页面跳转能力代替传统的多窗口模式。比如可以通过配置 pages.json 文件定义路径映射关系并借助 api 实现平滑过渡效果[^6]: ```json { "pages": [ { "path": "/pages/index", "style": {} }, ... ] } ``` 随后可以在脚本里这样发起请求: ```javascript uni.navigateTo({ url: '/pages/targetPage?param=value' }); ``` 以上几种办法能够较好地应对由 `window.open` 导致的各种异常状况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值