js: Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported
js: Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported
我正在使用 plotly 和 pyqt5(GUI 开发),当我尝试 download/export 生成图像时,出现此消息:
js: Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
我用的是QtWebengine,下一个例子:
import plotly.offline as po
import plotly.graph_objs as go
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5 import QtCore, QtWidgets
import sys
def show_qt(fig):
raw_html = '<html><head><meta charset="utf-8" />'
raw_html += '<script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>'
raw_html += '<body>'
raw_html += po.plot(fig, include_plotlyjs=False, output_type='div')
raw_html += '</body></html>'
fig_view = QWebEngineView()
# setHtml has a 2MB size limit, need to switch to setUrl on tmp file
# for large figures.
fig_view.setHtml(raw_html)
fig_view.show()
fig_view.raise_()
return fig_view
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
fig = go.Figure(data=[{'type': 'scattergl', 'y': [2, 1, 3, 1]}])
fig_view = show_qt(fig)
sys.exit(app.exec_())
这是一个警告,警告下载图像的方式(将其转换为字节)可能导致安全错误,但在这种情况下您可以忽略它。如果你想下载一个文件,那么你必须使用 QWebEnginePage 的 downloadRequested 信号:
<b>def handle_downloadRequested(item):
path, _ = QtWidgets.QFileDialog.getSaveFileName(
None, "Save File", item.suggestedFileName()
)
if path:
item.setPath(path)
item.accept()</b>
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
fig = go.Figure(data=[{"type": "scattergl", "y": [2, 1, 3, 1]}])
fig_view = show_qt(fig)
<b>fig_view.page().profile().downloadRequested.connect(
handle_downloadRequested
)</b>
sys.exit(app.exec_())
我正在使用 plotly 和 pyqt5(GUI 开发),当我尝试 download/export 生成图像时,出现此消息:
js: Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
我用的是QtWebengine,下一个例子:
import plotly.offline as po
import plotly.graph_objs as go
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5 import QtCore, QtWidgets
import sys
def show_qt(fig):
raw_html = '<html><head><meta charset="utf-8" />'
raw_html += '<script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>'
raw_html += '<body>'
raw_html += po.plot(fig, include_plotlyjs=False, output_type='div')
raw_html += '</body></html>'
fig_view = QWebEngineView()
# setHtml has a 2MB size limit, need to switch to setUrl on tmp file
# for large figures.
fig_view.setHtml(raw_html)
fig_view.show()
fig_view.raise_()
return fig_view
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
fig = go.Figure(data=[{'type': 'scattergl', 'y': [2, 1, 3, 1]}])
fig_view = show_qt(fig)
sys.exit(app.exec_())
这是一个警告,警告下载图像的方式(将其转换为字节)可能导致安全错误,但在这种情况下您可以忽略它。如果你想下载一个文件,那么你必须使用 QWebEnginePage 的 downloadRequested 信号:
<b>def handle_downloadRequested(item):
path, _ = QtWidgets.QFileDialog.getSaveFileName(
None, "Save File", item.suggestedFileName()
)
if path:
item.setPath(path)
item.accept()</b>
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
fig = go.Figure(data=[{"type": "scattergl", "y": [2, 1, 3, 1]}])
fig_view = show_qt(fig)
<b>fig_view.page().profile().downloadRequested.connect(
handle_downloadRequested
)</b>
sys.exit(app.exec_())