今天遇到vue window.open無法打開外部地址,我的場景是HTTPS打開HTTP外部地址。
在網上看了很多文檔,使用以下三種方法發現都不可以。
1、通過a標簽加onclick跳轉
newLink(url) {
let a = document.createElement(‘a‘);
a.setAttribute(‘href‘, url);
a.setAttribute(‘target‘, ‘_blank‘);
}
2、使用form的submit方法打開一個頁面
這種方法需要構造一個from,然后由js代碼觸發form的submit,將表單提交到一個新的頁面,
如果需要傳遞參數時,需要使用 POST 方法, 默認的 GET 方法無法傳遞參數。也就是新頁面的url中沒有參數部分。如:
newLink(url){ let form = document.createElement('form'); form.action = 'www.baidu.com?id=1'; form.target = '_blank'; form.method = 'POST'; document.body.appendChild(form); form.submit(); }
3、終極解決方案–先彈出窗口,然后重定向
第三種方案,其實是一種變通方案,核心思想是:先通過用戶點擊打開頁面,然后再對頁面進行重定向。示例代碼如下:
newLink(url){
// 打開頁面,此處最好使用提示頁面
let newLink = window.open(‘loading page‘);
axios.get(url)
.then(function (response) {
newLink.location.href = url;;
})
.catch(function (error) {
console.log(error);
})
}
最終結局方案:
1、let reg=new RegExp('http://','g')
let newMsg=JSON.stringify(url).replace(reg,'https://');
window.open(res.data.url)
2、HTTP更改為HTTPS地址也可以解決,但是請求時間過長會出現攔截警告,運行即可。