为啥 iPad 不能渲染“离线”情节而 iPhone 可以?

Posted

技术标签:

【中文标题】为啥 iPad 不能渲染“离线”情节而 iPhone 可以?【英文标题】:Why is iPad not able to render "offline" plotly plots but iPhone can?为什么 iPad 不能渲染“离线”情节而 iPhone 可以? 【发布时间】:2019-04-29 15:38:00 【问题描述】:

如果我在网站上托管离线绘图(例如,on a github.io page here),我可以在我的桌面和我的 iPhone(ios 12.0、Safari)上查看绘图,但不能在我的 iPad(iOS 12.1)上查看、Safari 和 Chrome)——我收到“您的浏览器不支持 WebGL”消息。

但是,对于所有这些设备,网页上的绘图(例如 this one)可以毫无问题地呈现。是什么导致了我的 iPhone 和 iPad 之间在渲染离线绘图时的差异?

【问题讨论】:

添加 Safari 和 iDevices 的确切版本可能会有所帮助 iDevice 版本:iPhone X (2018)、iPad Pro (2018) Safari 版本:匹配 iOS 版本 【参考方案1】:

绝对是一个奇怪的案例,我正在添加另一个答案,试图更好地解释我的想法。

Python 的 plotly(又名 plotly.py)在后台使用 plotly.js,当您将绘图下载为 html 时,它在 html 文件中包含库 plotly.js(您可以使用浏览器的开发工具检查它)。

同一plotly.py 版本的offline 模块将始终包含相同的plotly.js 版本,而online 模块可能包含plotly 的plot.ly 平台当前使用的plotly.js,或者至少包含那个将解释这些模块之间的差异。通过使用浏览器的工具检查代码,似乎无需使用 plotly.js 即可呈现 plotly 文档上的示例。

此外,plotly.js 正在对其 WebGL 代码进行重写过程,正如您在 issue 中看到的那样,它最初是针对版本 2 的,但可能会更早出现,您可以在评论中看到:

伴随着这种转变——或者甚至在它之前更好——我们 应该找到一种在 iOS 中测试 webgl 图的方法 - 也许使用 https://www.browserstack.com/screenshots/api ?我们需要确保 我们之前修复的错误 - 例如#280、#1868(任何其他 是特定于 iOS 的吗?) - 不要带着这个重写回来。

您可以在其中看到与此类似的对 issues 的引用。

TL DR:除了让您的浏览器和 plotlys 保持最新之外,您对此无能为力,plotly 的代码非常动态,因此您应该不时检查更新。

【讨论】:

我升级到 plotly==3.4.2 (plotly.js 1.42.5)。我使用的是以前使用 1.39.2 的 python 绑定版本。我仍然遇到同样的问题,但我会继续查看您给我的链接。【参考方案2】:

大多数现代浏览器都支持 WebGL,但有时默认禁用它。我不使用 safari,但您可以找到小的 guides 在网络上启用它,还有其他 sites 可以检查它是否已启用并丢弃该问题。并非所有 plotly 的绘图都使用 WebGL,尽管我认为表面绘图确实如此,因此您可能需要先检查它是否已启用。

【讨论】:

感谢您的回复。在这种情况下,WebGL 肯定是在 iPad 上启用的。正如您所提到的,我在 plotly 网站上链接到的 3D Surface 图需要 WebGL(并且可以在 iPad 上渲染),如果我访问 get.webgl.org,我会确认浏览器确实支持 WebGL。这似乎是关于 plotly 的离线与在线模式的特定内容——我能够在在线模式下成功查看相同的情节(也就是通过 plotly 的服务器)。 我查了repo,但找不到代码,正如你提到的在线和离线模块,你在使用plotly.py吗?什么版本?你用什么在前端显示图? 嗨 vlizana 很抱歉给您带来了困惑。当我说“在线”与“离线”时,我指的是 plotly.plotly 与 plotly.offline,当我在笔记本上绘图时,我正在使用 iplot 函数。让我创建一个简单的例子。 这是一个可以在 jupyter notebook 中运行的代码要点:gist.github.com/blondegeek/b7eb7eec68829c362a12abf3833494dd 如 cmets 中所述,plotly.plotly.iplot 工作正常,但 plotly.offline.iplot 不能。保存到 html 的绘图似乎也是这种情况(如果使用 plotly.offline 绘制,绘图将不会呈现,而是显示“您的浏览器不支持 WebGL”)。希望有帮助!再次感谢您的宝贵时间。【参考方案3】:

这是我尝试过的一些有效的方法。

    如果您使用的是 google Colab,请使用此代码-

    将 plotly.io 导入为 pio

    pio.renderers.default = "colab"

    进入 iPad 设置 —> Safari —> 高级 —> 实验功能 —> 打开 Web GL 2.0

【讨论】:

以上是关于为啥 iPad 不能渲染“离线”情节而 iPhone 可以?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的备用图标可以在 iPhone 上工作,但不能在 iPad 上工作?

Swift 4 相机视图,为啥这会在 iPad 而不是 iPhone 上崩溃?

为啥我不能删除或删除 iPhone / iPad Duplicate Enterprise App Icon Copy?

iphone 到 ipad 的转换:缺少一些情节提要选项

iPhone OK,但不是 iPad .. 为啥?

为啥在ipad上下载 仅限iphone的软件 在桌面不显示软件的图标?有啥办法解决么?