首页 > 解决方案 > Javascript条件替换不起作用

问题描述

如果 url 前缀位于 http:// 并忽略 https://,则 Javascript 有条件地将图像 src 替换为 https:// 目前我已将这段代码添加到源代码部分。

Javascript:

src="' + p.replace("http","https") + '"

问题:

http://被替换,https://但问题是它也被替换https://httpss://破坏 src 属性并且图像返回 404 错误。如何解决这个问题?

更新:

该变量p包含图像 URL,有时是 http,有时是 https。上面的代码成功地将 http 替换为 https 但是当一个 url 有 https 时,它会添加另一个像这样httpss://返回 404 并且图像无法加载的 s

标签: javascript

解决方案


只需扩展选择,以便您替换http://而不是http,即:

p.replace("http://", "https://")

请参见下面的示例:

const urls = [
  'https://example.com',
  'http://example.com'
];

urls.forEach(url => {
  console.log(`Original URL: ${url}`);
  
  // Incorrect behavior
  console.log(url.replace('http', 'https'));
  
  // Correct behavior
  console.log(url.replace('http://', 'https://'));
});


解决这个问题的另一种方法是利用URL APIIE11 之后的任何东西都支持它。您只需使用new URL()构造函数解析字符串,然后修改其protocol属性,即:

const urls = [
  'https://example.com',
  'http://example.com'
];

urls.forEach(url => {
  console.log(`Original URL: ${url}`);
  
  const modifiedUrl = new URL(url);
  modifiedUrl.protocol = 'https';
  console.log(modifiedUrl.toString());
});


推荐阅读