为什么url在HTML中通过input字段时会被转换成sub-url?
Why url is converted into sub-url in HTML when passing through input field?
我将 URL 作为 HTML 形式的用户输入,并使用 javascript 创建动态 link。
当我将输入作为 "https://www.google.com" 但是当我将输入作为 "[=39] 传递时,代码工作正常=]" 它正在将 link 转换为 localhost path 例如 file:///path_where_html_exists/urlpassed
这是我的代码
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<form>
<input id="inputurl" type="url" />
<button type="submit" onclick="handleSubmit()">sunmit</button>
<script src="newscript.js"></script>
</form>
<div id="newpara"></div>
</body>
</html>
JS
function handleSubmit() {
event.preventDefault()
var elem = document.getElementById('inputurl').value
console.log(elem)
ele = document.getElementById('newpara')
ele.innerHTML += `<a href="${elem}">link here</a>`
}
谢谢
如果您将文本放入 link 的“href”属性中,并且该文本的开头没有协议(http 或 https 或类似协议),浏览器将附加它到当前页面的末尾 url.
您可以在此 JSFiddle 中看到实际效果。
由于您是通过在浏览器中打开文件在您的电脑上对其进行测试,因此您会看到您提到的 url。
要修复它,只需检查文本是否有协议,并在必要时插入。一个非常基本的实现可能如下所示:
if (!elem.startsWith("http")) {
elem = "//" + elem;
}
本文 fiddle 将向您展示操作方法。
这里也是使用正则表达式更好的实现:
let reg = /^http(s)?:\/\//g;
if (!elem.match(reg)) {
elem = "//" + elem;
}
尝试在输入 url 似乎有效之前添加“http://”或“https://”
function handleSubmit() {
event.preventDefault()
var elem = document.getElementById('inputurl').value
console.log(elem)
ele = document.getElementById('newpara')
ele.innerHTML += `<a href="http://${elem}">link here</a>`
}
我将 URL 作为 HTML 形式的用户输入,并使用 javascript 创建动态 link。 当我将输入作为 "https://www.google.com" 但是当我将输入作为 "[=39] 传递时,代码工作正常=]" 它正在将 link 转换为 localhost path 例如 file:///path_where_html_exists/urlpassed 这是我的代码
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<form>
<input id="inputurl" type="url" />
<button type="submit" onclick="handleSubmit()">sunmit</button>
<script src="newscript.js"></script>
</form>
<div id="newpara"></div>
</body>
</html>
JS
function handleSubmit() {
event.preventDefault()
var elem = document.getElementById('inputurl').value
console.log(elem)
ele = document.getElementById('newpara')
ele.innerHTML += `<a href="${elem}">link here</a>`
}
谢谢
如果您将文本放入 link 的“href”属性中,并且该文本的开头没有协议(http 或 https 或类似协议),浏览器将附加它到当前页面的末尾 url.
您可以在此 JSFiddle 中看到实际效果。 由于您是通过在浏览器中打开文件在您的电脑上对其进行测试,因此您会看到您提到的 url。
要修复它,只需检查文本是否有协议,并在必要时插入。一个非常基本的实现可能如下所示:
if (!elem.startsWith("http")) {
elem = "//" + elem;
}
本文 fiddle 将向您展示操作方法。
这里也是使用正则表达式更好的实现:
let reg = /^http(s)?:\/\//g;
if (!elem.match(reg)) {
elem = "//" + elem;
}
尝试在输入 url 似乎有效之前添加“http://”或“https://”
function handleSubmit() {
event.preventDefault()
var elem = document.getElementById('inputurl').value
console.log(elem)
ele = document.getElementById('newpara')
ele.innerHTML += `<a href="http://${elem}">link here</a>`
}