我开发了一个
ReactJS
应用程序,它嵌入在 webview
中,适用于 android 和 ios。
我有一个重定向到新网站的按钮。如果第一次点击这个按钮,会触发api调用然后使用
window.open
进行重定向,如果第二次点击则不会触发api调用,直接应用重定向。
这是代码
let windowReference = window.open("", "_blank");
//first time
if (reward == null) {
let resp = await activate();
if (resp.ok) {
if (windowReference == null || windowReference.closed) {
window.open(myUrl, "_blank");
} else {
windowReference.location = myUrl;
}
}
} else {
//second time
if (windowReference == null || windowReference.closed) {
window.open(myUrl, "_blank");
} else {
windowReference.location = myUrl;
}
}
此代码在
android webview
和 browser
上运行良好,但在 ios webview
中,第一次它什么都不做,但第二次单击导航到 myUrl 就好了。
我试过的东西是
setTimeout
_blank
与_self
还是没有变化
有什么我想念的吗?
如果你能帮忙,请告诉我。
我认为问题是默认情况下 IOS Safari 与其他浏览器相比有严格的弹出窗口阻止程序,这可能会阻止它打开新窗口。
要解决此问题,您可以响应用户的手势打开窗口。您也可以尝试在异步调用的单独函数中打开新窗口,但不在异步函数中。
例子:
function handleOpenNewWindow() {
let windowReference = window.open("", "_blank");
if (windowReference == null || windowReference.closed) {
window.open(myUrl, "_blank");
} else {
windowReference.location = myUrl;
}
}
//--- call handleOpenNewWindow() asynchronously here ---
let resp = await activate();
if (resp.ok) {
setTimeout(handleOpenNewWindow, 0);
}