Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在重定向到一个空白窗口以等待使用JavaScript加载之前,有没有办法在同一个域下加载整个URL?_Javascript_Html - Fatal编程技术网

在重定向到一个空白窗口以等待使用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推送新状态