从synchronous XMLHttpRequest
s 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完全相同。