http://ask.dcloud.net.cn/article/64
我按照上面的设置了打开的url,比如 test://aaa,可以通过URL打开app了,但如果App已经启动了,再通过别的URL(比如test://bbb)返回APP,在iOS下plus.runtime.arguments没有变化,这个问题怎么解决,要怎么获取新的URL
我在原生代码里面看到url已经在下面的这个参数里面了,但不知道如何传给webview
// open url
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
PDRCore.instance().handle(PDRCoreSysEvent.openURL, with: url);
return true;
}
我用了个比较挫的方法解决了这个问题,就是在AppDelegate.swift添加一个全局变量globalLaunchUrl
var globalLaunchUrl = ""
// ...
// open url
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
PDRCore.instance().handle(PDRCoreSysEvent.openURL, with: url);
globalLaunchUrl = url.absoluteString;
return true;
}
然后添加一个插件方法
具体怎么制作插件查看这里:http://ask.dcloud.net.cn/article/67
// CM.swift
import Foundation
import AVFoundation
@objc(CM)
class CM:PGPlugin
{
//... 具体怎么写查看这里 http://ask.dcloud.net.cn/article/67
func getLaunchUrl(_ commands:PGMethod ?) -> Data{
// CallBackid 异步方法的回调id,H5+ 会根据回调ID通知JS层运行结果成功或者失败
// let cbid : String = (commands?.arguments?[0])! as! String;
// 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果
// PDRCommandStatusOK 表示触发JS层成功回调方法
// PDRCommandStatusError 表示触发JS层错误回调方法
let nsstring = "'\(globalLaunchUrl)'" as NSString
return nsstring.data(using: String.Encoding.utf8.rawValue)!
}
func clearLaunchUrl(){
globalLaunchUrl = ""
}
接着在启动页添加resume事件,为了省事,这里就不写插件的JS文件了,直接调用bridge.execSync
document.addEventListener("resume", resumeCheckUrl, false);
function resumeCheckUrl() {
if (mui.os.ios) {
var launchUrl = window.plus.bridge.execSync('CM', "getLaunchUrl")
checkArguments(launchUrl)
window.plus.bridge.execSync('CM', "clearLaunchUrl")
}
}
function checkArguments(url) {
alert(url)
}
// ...
}
这个markdown编辑器不行啊,代码块里面的下划线和反斜杠还要转义
呃,预览跟发布后不一样,预览的不对,需要转义
Arliang (作者)
这是iOS,没有触发
2017-10-12 22:28
猫猫猫猫
我一直用的旧版本的5+SDK离线打包,使用没问题。新版本没测试,可能有bug
2017-10-12 22:38