在重定向到一个空白窗口以等待使用JavaScript加载之前,有没有办法在同一个域下加载整个URL?
假设我有两页:在重定向到一个空白窗口以等待使用JavaScript加载之前,有没有办法在同一个域下加载整个URL?,javascript,html,Javascript,Html,假设我有两页: index.html和detail product.html作为索引页和产品详细信息页 在索引页面中,我有一个指向产品页面的链接: 如果用户单击链接,浏览器将打开一个空白页面作为产品页面加载 我想让这次经历更加顺利。是否可以执行一些操作,使索引页保持并等待产品页加载,然后以非常快的速度打开它 例如,我会这样做: $('a').click(function(){ var targetLink = $(this).attr('href'); var loadSuccessC
index.html
和detail product.html
作为索引页和产品详细信息页
在索引页面中,我有一个指向产品页面的链接:
如果用户单击链接,浏览器将打开一个空白页面作为产品页面加载
我想让这次经历更加顺利。是否可以执行一些操作,使索引页保持并等待产品页加载,然后以非常快的速度打开它
例如,我会这样做:
$('a').click(function(){
var targetLink = $(this).attr('href');
var loadSuccessCallback = function(){
window.href = targetLink;
}
holdLoading(loadSuccessCallback);
})
function holadLoading(cb) {
// do the loading thing
// .....
// if the page is loaded, then call "cb".
}
是的,如果链接位于同一服务器上(不是本地文件系统),则可以使用fetch获取其内容,将其存储到变量中,然后将整个页面的HTML设置为fetch的内容。唯一的问题是,这两个页面的URL都是相同的,因此您可以在URL的末尾添加一个#otherPage,并生成一个JavaScript函数,在以后加载页面时自动读取location.hash 费奇也是 获取(“detail product.html”) .然后(r=>r.text()) .then(r=>{location.hash=“details”;document.getElementsByTagName(“html”)[0]。innerHTML=r}) 或者,您可以使用文本内容创建一个新Blob,并使用Blob的对象URL打开一个新选项卡
或者在主页上用blob URL创建一个新的iframe,并在按下按钮时设置主窗口的位置散列,在页面加载时读取散列,根据散列进行提取,并将iframe src设置为加载后获取的文本的blob URL您的问题已经得到了回答,因此我将写一个替代方案 我认为你应该让浏览器在加载完当前页面后预加载其他页面的内容,因为用户对你想要的内容的体验不仅流畅,而且听起来可能会让用户在一段时间后感到困惑,为什么他们点击的链接不会带他们去任何地方。它也有搜索引擎优化问题 就性能而言,最好的方法是使用prerender:
<link rel="prerender" href="https://example.com/content/to/prerender">
…但如果您关心浏览器兼容性,则可以使用预回迁
<link rel="prefetch" href="https://www.example.com/solutions" />
但浏览器不会重定向到新页面,对吗?@AGamePlayer从技术上讲不是,它只会作为新页面显示给用户。这有问题吗?这种方式不会更新浏览器的URL。因此,如果用户进入产品页面并将URL复制到浏览器的地址栏中,他仍然会得到索引页面。@agameplayer,这样您就可以将页面顶部的哈希修改为#newpage,然后在页面上加载到JavaScript read location.hash中,并制作某种哈希字典来保存URL(或者将文件路径本身放入散列)然后在页面加载时自动调用fetch函数加载内容您要做的是一个Ajax请求,加载目标url,然后用新的内容替换当前页面内容。我知道这个库,但肯定还有更多。@arieljuod谢谢,但这种方式不会更新浏览器的url。因此,如果用户输入产品t页面并复制浏览器地址栏中的URL,他仍然会获得索引页面。turbolinks是否更改URL,如果手动执行该ajax请求,则可以使用navigator History API使用新URL推送新状态