Javascript 节点webkit如何在另一个窗口中调用函数?
我用这段代码创建了一个新窗口,并试图发送一些数据,但函数没有被调用,也许我做错了 index.html上的script.jsJavascript 节点webkit如何在另一个窗口中调用函数?,javascript,windows,node.js,node-webkit,Javascript,Windows,Node.js,Node Webkit,我用这段代码创建了一个新窗口,并试图发送一些数据,但函数没有被调用,也许我做错了 index.html上的script.js var path = require('path'); element.onclick = function(){ var win = gui.Window.get(window.open('listdir.html')); var location = path.resolve(process.cwd(),'fontsFolder'); win.
var path = require('path');
element.onclick = function(){
var win = gui.Window.get(window.open('listdir.html'));
var location = path.resolve(process.cwd(),'fontsFolder');
win.eval(null, 'listdir("'+location+'")'); //Is there a node function to parse '\'?
};
listdir.html上的listdir.js
function listdir(directory){
alert("directory "+directory); //never called
}
错误:
ReferenceError: listdir is not defined
at <anonymous>:1:1
at Window.init.Window.eval (window_bindings.js:486:16)
at HTMLLIElement.element.onclick (file:///C:/../AppData/Local/Temp/nw3528_1882/js/script.js:29:12)
ReferenceError:未定义listdir
时间:1:1
在Window.init.Window.eval(Window_bindings.js:486:16)
在htmlilement.element.onclick(file:///C:/../AppData/Local/Temp/nw3528_1882/js/script.js:29:12)
好的,这可能不是“如何在另一个窗口中调用函数”问题的正确答案,而是“如何向新窗口发送参数”(编辑标题之前)初始问题的答案
由于我热衷于HTML5中的新存储对象,我会通过sessionStorage
同步窗口(因此所有传递的参数都会在当前的新窗口生存期内有效,但不会在以后有效)
我的工作解决方案:
index.html(初始窗口)
那么,它是如何工作的呢<代码>窗口。eval(请参见此处)需要脚本的源代码,这些脚本可以在新创建的窗口的上下文中运行。我猜,您的第一次尝试不起作用,因为脚本将在创建窗口的那一刻执行,因此DOM还没有被解析,并且在那一刻没有可用的JavaScript函数。因此,只有基本功能可用(窗口
对象)。因此,我们将传入一个函数,该函数将在window.sessionStorage中存储序列化的JSON。这样,您就可以从新窗口中的所有函数访问它
再次强调:这不是一般用法的正确答案,但可能适合您的问题。您可以将参数附加到URL,如GET请求:
listdir.html?param1=value1¶m2=value2
是的,我当然可以这样做,我只是希望有一种更动态的方式。您可以使用“全局”变量共享任何内容,包括函数,在窗口之间。您说得对,在DOM完全加载之前调用了Window.eval,我听了文档结束事件,现在一切正常,谢谢:)
<!DOCTYPE html>
<html>
<body>
Test <a href="">Click</a>
<script src="jquery-1.11.1.min.js"></script>
<script>
var mySharedObj = {
'one': 1,
'two': 2,
'three': 3
};
// node-webkit specific
var gui = require('nw.gui');
$('a').click(function() {
var win = gui.Window.get(window.open('index2.html'));
win.eval(null, 'sessionStorage.setItem(\'mySharedJSON\', \''+JSON.stringify(mySharedObj)+'\');');
});
</script>
</body>
<!DOCTYPE html>
<html>
<body>
Test 2:
<script src="jquery-1.11.1.min.js"></script>
<script>
$(document).ready(function() {
// Process sharedObj when DOM is loaded
var mySharedObj = JSON.parse(sessionStorage.getItem('mySharedJSON'));
// Now you can do anything with mySharedObj
console.log(mySharedObj);
});
</script>
</body>