<IFrame :src="src" /> 打开页面的时候设置自定义的HTTP头部(headers) Authorization: 'Bearer ' + getAccessToken(), 'tenant-id': getTenantId() vue3中怎么解决
时间: 2024-09-26 21:14:28 浏览: 71
在 Vue3 中,如果你想要在 `<iframe>` 标签加载外部页面时设置自定义 HTTP 头部信息,你需要在父组件中通过 JavaScript 动态操作 iframe 的 `contentWindow` 或 `contentDocument` 属性来实现。这里是处理的一种方法:
```html
<template>
<div>
<iframe ref="customIframe" :src="src" @load="handleIframeLoad"></iframe>
</div>
</template>
<script>
export default {
data() {
return {
src: '', // 需要加载的源地址
accessToken: getAccessToken(),
tenantId: getTenantId()
};
},
methods: {
handleIframeLoad() {
const iframe = this.$refs.customIframe;
if (iframe && iframe.contentWindow) { // 检查是否已加载完成
const headers = {
'Authorization': `Bearer ${this.accessToken}`,
'tenant-id': `${this.tenantId}`
};
// 如果 iframe 具有 document 对象,可以设置其默认请求头
if (iframe.contentDocument.defaultView) {
iframe.contentDocument.defaultView.XMLHttpRequest.setRequestHeader('Content-Type', 'application/json');
for (let header in headers) {
iframe.contentDocument.defaultView.XMLHttpRequest.setRequestHeader(header, headers[header]);
}
} else { // 如果是老版本浏览器,可能需要使用 postMessage 来设置跨域头
window.addEventListener('message', (event) => {
if (event.origin === yourServerDomain && event.data.type === 'setHeaders') {
const xhr = new XMLHttpRequest();
xhr.open('GET', '/your-endpoint'); // 假设这是一个能接受POST请求并设置Header的服务器端API
xhr.setRequestHeader('Authorization', `Bearer ${this.accessToken}`);
xhr.setRequestHeader('tenant-id', `${this.tenantId}`);
xhr.onload = () => {};
xhr.send();
}
});
}
}
}
}
};
// 请替换 yourServerDomain 和 /your-endpoint 为你实际的域名和API路径
</script>
```
注意,这仅适用于同源策略允许的情况,如果需要跨域访问,则可能需要后端服务器配合。此外,上述示例使用了 `XMLHttpRequest`,在现代浏览器中,更推荐使用 Fetch API 或 Axios。
阅读全文