当前位置: 首页 > 知识库问答 >
问题:

为什么python不能从python函数中调用Javascript()?

路雅懿
2023-03-14

我使用从iPython笔记本下载CSV时建议的代码动态构建javascript代码,并在从jupyter笔记本调用时使用python中的javascript()将其传递给浏览器。代码工作得很好。如果我在python函数中嵌入相同的代码,并从同一个jupyter笔记本调用python函数,那么python中的调用Javascript()将不再有效。如何使可重用功能正常工作?

我正在Windows 10上运行的Chrome版本73.0.3683.103(官方版本)(64位)上尝试此功能。如果已经回答,请道歉。我已经搜索了SO和谷歌。

这很有效。。

from IPython.display import Javascript
js_download = """
var csv = '%s';

var filename = 'results.csv';
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
    navigator.msSaveBlob(blob, filename);
} else {
    var link = document.createElement("a");
    if (link.download !== undefined) { // feature detection
        // Browsers that support HTML5 download attribute
        var url = URL.createObjectURL(blob);
        link.setAttribute("href", url);
        link.setAttribute("download", filename);
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
}
""" % data_in_dataframes.to_csv(index=False).replace('\r','\\r').replace('\n','\\n').replace("'","\'")
Javascript(js_download)

这不起作用,它无法执行Javascript(js\u下载),但它也没有给出我在jupyter笔记本或浏览器中的java控制台中看到的任何错误。就好像它从未执行过Javascript(js\u下载)。

from IPython.display import Javascript
def js_download_csv(df_download, s_filename='results.csv'):
    js_download =   """
    var csv = '%s';
    var filename = '%s';
    var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, filename);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
    """ % (df_download.to_csv(index=False).replace('\r','\\r').replace('\n','\\n').replace("'","\'"), s_filename)
    Javascript(js_download)
    return None
js_download_csv(df_download, s_filename)

如果我遗漏了任何明显的东西,我深表歉意。我找不到任何关于所发生情况的错误或日志。

欢迎任何建议。

共有1个答案

鲜于承基
2023-03-14

我找到了部分答案,虽然我不知道为什么会出现这个问题,但我找到了如何克服它。在里面https://medium.com/@tomgrek/reactive-python-javascript-communication-in-jupyter-notebook-e2a879e25906我们在文章中看到了以下问题:

一个大问题是:某些地方需要返回Javascript作为其输出,否则它不会在笔记本中执行。

因此,如果我们将代码更改为以下内容(即返回Javascript调用),它就可以工作。

from IPython.display import Javascript
def js_download_csv(df_download, s_filename='results.csv'):
    js_download =   """
    var csv = '%s';
    var filename = '%s';
    var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, filename);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
    """ % (df_download.to_csv(index=False).replace('\r','\\r').replace('\n','\\n').replace("'","\'"), s_filename)
    return Javascript(js_download)
js_download_csv(df_download, s_filename)
 类似资料:
  • Python @classmethod 为什么不能调用 @property 装饰的属性 ? AttributeError: 'property' object has no attribute 依然不是没清楚

  • 问题内容: 我试图从我的JavaScript代码中调用Python中的函数。我使用了此处说明的代码,但对我不起作用。 这是我的JS代码: Python代码: 你知道这是怎么回事吗? 问题答案: 除了上述要点之外,并假设您已经具有适当的设置来服务您的python脚本并返回响应。您应该提交一个异步请求,尤其是在python代码进行大量计算的情况下。 如果您只进行少量计算,而使用从jQuery 1.8开

  • 问题内容: 我正在尝试从C ++实现调用Python函数。我以为可以通过函数指针来实现,但是似乎不可能。我一直在使用以完成此任务。 假设在Python中定义了一个函数: 现在,我需要将此函数传递给C ,以便可以从那里调用它。如何在C 端编写代码以实现此目的? 问题答案: 如果可以使用任何名称: 将其传递给需要一个的函数。 如果它在具有相同名称的单个已知名称空间中: 已定义,因此您可以像调用任何函数

  • 问题内容: 我想使用Python的某些Haskell库(例如Darcs,Pandoc),但似乎在Python中没有直接的Haskell外部函数接口。有什么办法吗? 问题答案: 只要您可以获取Python代码来调用C,就可以调用已通过FFI导出的Haskell函数 另一种方法是编写标准IPC接口,在darcs和pandoc的情况下,仅将它们称为原始可执行文件,然后解析其输出可能是可行的方法。 至于在

  • 给定一个字符串,返回子字符串长度2在该字符串中出现的次数计数,并作为该字符串的最后2个字符,因此“hixxxhi”产生1(我们不计算结束子字符串)。 我在其中一个网站上发现了这个问题(https://codingbat.com/prob/p145834). 网站上对上述问题的回答如下: 我对下面提到的代码行有疑问 现在,我知道这段代码正在提取字符串“str”的最后两个字母。我感到困惑的是变量名。正

  • 问题内容: 我想从JavaScript代码中调用Python函数,因为JavaScript中没有其他方法可以做我想做的事情。这可能吗?您可以调整以下代码段使其正常工作吗? JavaScript代码: 包含使用高级库编写的函数,这些函数在JavaScript中没有易写的等效项: 问题答案: 您需要做的就是向您的pythoncode发出ajax请求。您可以使用jquery 进行此操作,也可以仅使用ja