IndexedDB - iPad Safari(版本:10 及更高版本)jquery.bind 不起作用

Posted

技术标签:

【中文标题】IndexedDB - iPad Safari(版本:10 及更高版本)jquery.bind 不起作用【英文标题】:IndexedDB - iPad Safari (ver: 10 & above) jquery.bind not working 【发布时间】:2017-09-08 09:26:49 【问题描述】:

说明:

我有一个从 indexedDB 中获取记录的函数。当通过使用'jquery.click'将函数调用绑定到元素来调用它时,它工作正常,但是当我使用'jquery.bind'绑定相同的元素时,它会使webapp崩溃。调试时我发现应用程序在 request.onsuccess 事件中崩溃。

平台: Ipad(ios 10 及以上版本)、Safari 浏览器

问题:“jquery.bind”不起作用。

我尝试过的场景:

    我尝试通过绑定元素而不调用 indexedDB 相关函数 - 工作正常 我在 Windows 选项卡中尝试过 - 工作正常 使用 jquery.click - 工作正常 使用 jquery.bind 绑定元素时 - 使 web 应用程序崩溃

示例:

$('#ABC').bind('click', function(e) 
 var transaction = db.transaction(['Table1'],'readonly')
 var objStore = transaction.objectStore('Table1');
 var request = objStore.getAll()
 request.onsuccess = function (event) 
       console.log(event);
 )

)

在上述场景中,应用程序在触发事件时崩溃,但如果我们使用 jquery.click,则它可以正常工作。

请帮忙。

【问题讨论】:

【参考方案1】:

您似乎正在使用全局数据库变量并尝试在应用程序的整个生命周期内重复使用相同的数据库连接。无法保证在单击事件发生时,数据库已定义并打开。它可能还没有打开,它可能已经关闭,它甚至可能没有被定义为一个变量。先试试吧。

其他说明:

对于单个表上的事务,您不需要 [] 为您的请求或交易记录错误消息,以便您获得更多有用信息 由你决定,但 readonly 是隐式的,因为它是默认的,不需要指定它 您确实需要更具体地了解崩溃的含义。您的问题目前的措辞方式很难提供帮助。

【讨论】:

【参考方案2】:

IDBObjectStore 上的getAll() 在 Safari 10.1 之前不受支持(请参阅http://caniuse.com/#feat=indexeddb2) - 我认为 iOS 更新尚未发布。 (至少,我的 iPhone 在用户代理中报告 10.0。)您确定这在其他情况下在平台上有效,还是只是未报告错误?

正如另一位 Josh 所说,很难准确说出您遇到了什么问题 - 如果“崩溃”导致您遇到异常,您能告诉我们异常消息是什么吗?

【讨论】:

getAll 如果在 Web Worker bugs.webkit.org/show_bug.cgi?id=172434 中使用,实际上确实会导致 Safari 崩溃 - 该错误已修复,但似乎该修复尚未包含在当前版本中。

以上是关于IndexedDB - iPad Safari(版本:10 及更高版本)jquery.bind 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

window.click 在 iPad 版 Safari 上不触发

window.open 总是在 iPad 版 Mobile Safari 中打开新标签页

带有 iOS 8/ Safari 的 IndexedDB

显示:弯曲;不适用于 iPad(Chrome 和 Safari)

html Repro Safari IndexedDB autoIncrement bug

如何查看IPAD2中Safari的版本是多少