我刚刚进入HTML/JavaScript,有一个问题要问你们。
我正在尝试让我的主页从我的 Web 服务器中提取所述网站的标题。 如果我去127.0.0.1/?q=name
它会返回,让我们只说"Foo"。没有别的只是页面上明文中的"Foo"。
我希望我的网站在加载时动态拉取它。这是我用iFrame尝试的脚本,但它似乎可以移动所有内容。我是不是想多了?
<h1>Welcome to
<iframe src="http://127.0.0.1:8080/?q=name" name="targetframe" allowTransparency="true" scrolling="no" frameborder="0"></iframe>
</h1>
Thank you for visiting !
谢谢!!!
如果您尝试从同一域获取纯文本信息,iframe 听起来有点矫枉过正 - 您可以考虑改用普通的网络请求,并在响应返回时填充标准元素(如<span>
(:
<h1>
Welcome to <span id="name-span"></span>
</h1>
与 JS:
fetch('http://127.0.0.1:8080/?q=name')
.then(res => res.text())
.then((textResponse) => {
document.querySelector('#name-span').textContent = textResponse;
});
要以这种方式填充多个项目,您可以考虑改用数组,例如:
const qs = ['name', 'age'];
qs.forEach((q) => {
fetch('http://127.0.0.1:8080/?q=' + q)
.then(res => res.text())
.then((textResponse) => {
document.querySelector('#' + q + '-span').textContent = textResponse;
});
});
请注意,如果您尝试获取的信息位于同一域中,fetch
可以工作 - 否则,您将不得不像您一样使用有点笨拙的iframe
,或者将请求从服务器上退回,否则您会遇到 CORS 问题。
TL;DR
您不能只从Javascript
访问外部资源,此限制是出于安全原因。
可能的解决方案
您已经使用过iframe
,所以我假设您知道the CORS policy
。
您可以尝试使用 JSONP,但是在这种情况下,您还需要在服务器端实现此概念,以便能够提供callback
参数。
如果向同一域发出请求,您可以使用任何时间XMLHttpRequest
例如,这可以在JQuery
的帮助下完成。
$.ajax({
url: "http://127.0.0.1:8080/?q=name",
cache: false,
success: function(html){
$("#your_h1_or_any_other_selector").append(html);
}
});