让我们拥有一个包含两个页面的简单jQuery移动应用程序。像这样的东西:
<body>
<div data-role="page" id="page1">
<div role="main" class="ui-content">
<a href="#page2">Page 2</a>
</div>
</div>
<div data-role="page" id="page2">
<div role="main" class="ui-content">
<a href="#page1">Page 1</a>
</div>
</div>
</body>
现在,当我在第1页上创建一个IndexedDB数据库时,数据库被分配到我的起始URL&#34; pages.html&#34;。然后,我导航到第2页,可以访问相同的IndexedDB。到目前为止一切都还可以。
但是,当我在第2页上点击浏览器的刷新按钮时,浏览器会加载页面&#34; pages.html#page2&#34;。现在,IndexedDB被分配到URL&#34; pages.html#page2&#34;这是另一个数据库,而不是&#34; pages.html&#34;。
即使用户刷新浏览器,我如何解决此问题并始终使用相同的数据库?
答案 0 :(得分:1)
除非两个网址的来源不同,否则您不应该看到不同的数据库。 Source:
IndexedDB遵循同源策略。原点是正在执行脚本的文档的URL的域,应用程序层协议和端口。每个来源都有自己的相关数据库集。每个数据库都有一个名称,用于在原点内标识它。
对IndexedDB施加的安全边界阻止应用程序访问具有不同来源的数据。例如,虽然http://www.example.com/app/中的应用或页面可以从http://www.example.com/dir/检索数据,但由于它们具有相同的来源,因此无法从http://www.example.com:8080/dir/(不同端口)或{{3 (不同的协议),因为它们有不同的起源。
您真的在https://www.example.com/dir/和http://example.com/pages.html#page1看到了不同的数据库吗?或者在第二种情况下,URL会以某种方式更改,可能是http://example.com/pages.html#page2或https://example.com/pages.html#page2?