我正在寻找一种解决方案,以强制来自fetch
API 的图像进入https
而不是http
API 从获取的http
文件中以JSON
的形式返回图像结果,但这在控制台中向Mixed Content
发出警告
我以
的身份进入componentDidMount
componentDidMount() {
var self = this;
const proxyurl = 'https://cors-anywhere.herokuapp.com/';
const url = `//api.tripadvisor.com/api/partner/2.0/location/${this.props
.tripAdvisorId}?key=${AuthKey}`;
fetch(proxyurl + url)
.then(data => data.json())
.then(data => {
self.setState({
reviewData: data,
isLoading: false
});
});
}
,然后通过mapping
数据
{this.state.reviewData.reviews.map(i => {
return (
<div key={i.id}>
<img src={i.rating_image_url} alt={i.title} />
</div>
);
})}
当不是url
的{{1}}时,如何强制{i.rating_image_url}
的{{1}}使用https
?
答案 0 :(得分:1)
通过使用正则表达式,类似于:
{this.state.reviewData.reviews.map(i => {
return (
<div key={i.id}>
<img src={i.rating_image_url.replace(/^http:\/\//i, 'https://')} alt={i.title} />
</div>
);
})}
答案 1 :(得分:0)
const url = new URL(originalUrl);
url.protocol = url.protocol.replace('http', 'https');
console.log(url.href);
此方法使用内置的URL类进行完全解析,然后在协议上使用字符串替换。
答案 2 :(得分:0)
只需更改此代码即可检查您是否正在接收图像
<img src={i.rating_image_url ? i.rating_image_url : i.rating_image_url.replace(/^http:\/\//i, 'https://')} alt={i.title} />
通过这种方式,我们正在检查是否正在获取其价值。
为了获得更好的理解,您也可以这样做
{this.state.reviewData.reviews.map(i => {
console.log(i.rating_image_url);
return (
<div key={i.id}>
<img src={i.rating_image_url} alt={i.title} />
</div>
);
})}
这将显示您在浏览器控制台上的rating_image_url中接收的任何数据。
希望它对您有帮助。