作为项目的一部分,我需要在IPython模块中嵌入一些javascripts。 这就是我想要做的事情:
from IPython.display import display,Javascript
Javascript('echo("sdfds");',lib='/home/student/Gl.js')
我的Gl.js看起来像这样
function echo(a){
alert(a);
}
是否有某种方法可以将“Gl.js”和其他此类外部脚本嵌入到笔记本中,这样每次我尝试执行一些需要的Javascript代码时,我都不必将它们包含为“lib”参数那个图书馆。
答案 0 :(得分:9)
作为一个非常短期的解决方案,您可以使用IPython display()
和HTML()
函数将一些JavaScript注入页面。
from IPython.display import display, HTML
js = "<script>alert('Hello World!');</script>"
display(HTML(js))
虽然我不建议使用<{1}}方法,但有时我觉得快速测试某些内容或动态生成一个小的JavaScript代码段很有用。
答案 1 :(得分:5)
总结代码。
导入脚本:
%%javascript
require.config({
paths: {
d3: '//cdnjs.cloudflare.com/ajax/libs/d3/3.4.8/d3.min'
}
});
添加如下元素:
%%javascript
element.append("<div id='chart1'></div>");
或者这个:
from IPython.display import Javascript
#runs arbitrary javascript, client-side
Javascript("""
window.vizObj={};
""".format(df.to_json()))
更详尽的帖子解释了如何在JavaScript中访问Python变量,反之亦然。
答案 2 :(得分:3)
安装包装时没有开箱即用,至少目前是这样。
这样做的方法是使用custom.js
和jQuery getScript
将js注入笔记本中。
我明确地对如何做到这一点保持模糊,因为它是一个不时变化的开发功能。
您应该知道的是,用户个人资料中的static
文件夹为merged
,其中包含网络服务器静态资源,您可以通过询问正确的网址来访问此文件夹中的任何文件。
此前几个小时前,我们已经在IPython每周视频“lab meeting”上播放了这个问题,并在youtube上播放了现场直播(您可能会有更长的答案),我已经与该问题的作者展开了讨论here
答案 3 :(得分:3)
我已经和这个问题争了好几天了,这里的东西看起来很有效;买家要小心,这是一个最小的工作解决方案,它既不漂亮也不是最佳 - 一个更好的解决方案将非常受欢迎!
首先,在.ipython/<profile>/static/custom/myScript.js
中,我们做了一些require.js魔术:
define(function(){
var foo = function(){
console.log('bar');
}
return {
foo : foo
}
});
复制此模式以获得任意数量的功能。然后,在.ipython/<profile>/static/custom/custom.js
中,将它们拖到持久性的东西中:
$([IPython.events]).on('notebook_loaded.Notebook', function(){
require(['custom/myScript'], function(custom){
window.foo = custom.foo;
} );
});
是的,我是一个可怕的人,他把东西扔到窗口对象上,命名空间就像你认为合适。但现在在笔记本中,像
这样的细胞%%javascript
foo();
应该完全按照它应该的样子,而不必用户显式导入你的JS。我希望看到一个更简单的解决方案(plz开发人员可以在$.getScript('/static/custom/util.js');
中使用custom.js
来加载一堆全局JS函数) - 但这是我现在所拥有的最好的。抛开这个歌舞,巨大的升级到IPython笔记本团队,这是一个很棒的平台!
答案 4 :(得分:0)
由于某种原因,我遇到了IPython.display.Javascript问题。这是我的替代方法,可以处理导入外部.js文件和运行自定义代码的问题:
from IPython.display import display, HTML
def javascript(*st,file=None):
if len(st) == 1 and file is None:
s = st[0]
elif len(st) == 0 and file is not None:
s = open(file).read()
else:
raise ValueError('Pass either a string or file=.')
display(HTML("<script type='text/javascript'>" + s + "</script>"))
用法如下:
javascript('alert("hi")')
javascript(file='Gl.js')
javascript('echo("sdfds")')