如何通过JavaScript或jQuery在客户端获取其他域名页面的title标签?
关于纯客户端JS/jQuery获取跨域页面的问题 <a class="header-anchor" href="#关于纯客户端js-jquery获取跨域页面的问题" aria-hidden="true">#</a></h1>
<p>嘿,我来帮你拆解这个问题~首先得明确一个核心限制:<strong>浏览器的同源策略(Same-Origin Policy)</strong>,它会阻止客户端脚本直接请求不同域名下的资源,所以你直接用<code>$.ajax</code>去请求<code>http://example.com</code>的话,浏览器会直接拦截这个请求,根本拿不到返回的数据,更别说提取title了。</p>
<p>先说说你提到的两种方法:</p>
<ul>
<li><strong>Iframe方案</strong>:确实,只要目标网站设置了<code>X-Frame-Options</code>头(比如设为<code>DENY</code>或者<code>SAMEORIGIN</code>),浏览器就会拒绝加载这个iframe;就算侥幸能加载,跨域情况下你也没法通过JS访问iframe里的<code>document.title</code>,因为同源策略会限制不同源的iframe之间的DOM访问。</li>
<li><strong>服务器端代理方案</strong>:这个是目前最可行的办法。你的前端把要请求的地址(比如<code>http://example.com</code>)发给自己的服务器接口,由服务器去请求目标网站(服务器不受同源策略限制),拿到HTML后解析出<code><title></code>标签的内容,再返回给前端。这个方法完全靠谱,也是这类需求的常规解决方案。</li>
</ul>
<p>那回到你的核心问题:<strong>有没有办法仅通过客户端JS/jQuery获取跨域页面的title?</strong><br>
答案是:几乎没有。除非目标网站主动提供了支持跨域访问的接口(比如JSONP或者配置了CORS允许你的域名),但显然<code>http://example.com</code>不会为了让你拿title特意做这个配置。其他看似“客户端”的方法,比如借助第三方跨域代理服务,本质还是依赖别人的服务器做中转,并不是纯客户端的操作。</p>
<p>另外顺便提一下,你代码里的<code>data.get_title_tag</code>是无效的——就算能拿到返回的HTML,它也是一个字符串,你需要用DOM解析的方式提取title,比如:</p>
<pre class="hljs"><code class="language-javascript volc-pre-code">// 假设能拿到跨域的HTML字符串(实际跨域情况下做不到)
const parser = new DOMParser();
const doc = parser.parseFromString(data, 'text/html');
const title = doc.title;
</code></pre>
<p>但还是那句话,跨域请求本身在客户端就会被拦截,所以这段代码在纯客户端场景下根本没法运行。</p>
<p>内容的提问来源于stack exchange,提问作者David Foie Gras</p>
相关产品推荐
相关产品推荐

