【問題集】window.Openブロックされた問題の使用
2243 ワード
必要:
インタフェースを呼び出すと、応答内容が新しいtabページに表示されます.
実現構想:
応答コールバックでwindowを通過する.Open()メソッドで、新しいtabを開きます.
質問:
ブラウザがブロックされているため、新しいtabが開けません.
シナリオ:
1、ネットで主な解決策を探した.
クリックイベント:
a、aラベルを作成し、clickイベントをトリガーする.
b、formフォームを作成し、submitをトリガーする
この2つのスキームは、ブラウザがユーザの操作だと判断するため、遅延せずにtabを再開することができる.
しかし、私がこのコードを1 s実行に遅延すると、tabはブラウザにブロックされます.~~ブラウザは広告だと思っているかもしれませんが...
httpリクエストには遅延があるに違いないので、このスキームは実行できません.そこでシナリオ2があります.
2、イベントトリガをクリックするときにwindowを呼び出す.Open()メソッドは、新しいtabを開き、応答コールバックで、新しいtabを開くhrefを設定します.
インタフェースを呼び出すと、応答内容が新しいtabページに表示されます.
実現構想:
応答コールバックでwindowを通過する.Open()メソッドで、新しいtabを開きます.
質問:
ブラウザがブロックされているため、新しいtabが開けません.
シナリオ:
1、ネットで主な解決策を探した.
クリックイベント:
a、aラベルを作成し、clickイベントをトリガーする.
. var a = document.createElement("a");
a.setAttribute("href", url);
a.setAttribute("target", "_blank");
document.body.appendChild(a);
a.click();
b、formフォームを作成し、submitをトリガーする
var f=document.createElement("form");
f.setAttribute("action" , url );
f.setAttribute("method" , 'get' );
f.setAttribute("target" , '_black' );
document.body.appendChild(f)
f.submit();
この2つのスキームは、ブラウザがユーザの操作だと判断するため、遅延せずにtabを再開することができる.
しかし、私がこのコードを1 s実行に遅延すると、tabはブラウザにブロックされます.~~ブラウザは広告だと思っているかもしれませんが...
httpリクエストには遅延があるに違いないので、このスキームは実行できません.そこでシナリオ2があります.
2、イベントトリガをクリックするときにwindowを呼び出す.Open()メソッドは、新しいtabを開き、応答コールバックで、新しいtabを開くhrefを設定します.
var new_window = null;
$scope.save= function () {
new_window = $window.open();
commonService.sendRequest(Api.choosePayChannel, 'POST', {
orderNo: $scope.orderNo,
payType: $scope.currentPlatform
}).then(function (resp) {
var respData = resp.data;
if (respData) {
if (respData.type == 'html') {
new_window.document.write(respData.result);
} else if (respData.type == 'img') {
var url = $state.href('smsPay', {codeUrl: respData.result, orderId: $scope.orderNo});
new_window.location.href = window.location.origin+window.location.pathname+url;
}
}
}, function (error) {
new_window.close();
commonService.showErrorTip(error);
});
};