JavaScript / HTML - 在页面加载

时间:2017-12-05 21:11:42

标签: javascript html xmlhttprequest

synchronous XMLHttpRequests are deprecated开始,在浏览器调用onload事件之前加载任意数据文件的正确方法是什么(更重要的是,在它滚动到url的#hash之前)?

我有一个网页,可以加载降价文件并将其呈现为div。当用户使用哈希加载页面时,我需要在浏览器滚动到带有哈希的部分之前呈现文件。如果我使用异步ajax请求,浏览器会在呈现降价之前滚动。将async设置为false,我得到了所需的行为,但浏览器警告说同步ajax调用已被弃用。

有一些解决方法,例如在加载页面时滚动到元素,但是当在浏览器历史记录中向前和向后单击时,滚动会将您发送到错误的位置。您可以检测到它是后退/前进而不是滚动(在这种情况下,浏览器会尝试将您滚动到正确的位置,但因为还没有呈现标记而失败),或者无论用户如何滚动进入页面,浏览器不会保持离开页面时的滚动位置(不一致的浏览行为)。

我查看了十几个StackOverflow问题,但他们都回答了如何处理异步请求,而不是如何正确地同步加载文件。

我尝试过的事情

<link rel="import" />

我可以使用<link rel="import" type="text/markdown" href="..." />,然后使用一些JavaScript来提取内容并进行渲染,但是尽管设置了type="text/markdown",它仍会尝试将其作为HTML文档加载并生成警告:

  

资源被解释为文档但以MIME类型text / markdown传输:“...”。

link的{​​{1}}属性是一个带有DOM的文档对象,而不是纯文本,这意味着我的markdown文档中的任何HTML都被解析(在某些情况下不正确,例如使用时)自我关闭custom elements)。

import

我可以使用<iframe>但基本上有相同的问题(以及相同的警告)。最重要的是,JavaScript操纵iframe的内容并使用这些内容在包含框架中生成元素变得更加复杂。

<iframe>

我尝试使用<embed />元素,但它再一次将markdown文档解释为HTML文档,尽管设置了<embed>。事实上,它似乎与iframe完全相同。

0 个答案:

没有答案