Bạn có thể sử dụng pollit
:) ...
var pit = require("pollit");
foo = function(data) {
console.log(nw);
};
pit.nw('nw', foo);
Tôi đã thử nghiệm nó và nó làm việc cho tôi :). Điều này mô đun hóa các giải pháp mà tôi đưa ra gần cuối này.
Đối tượng nw
không tồn tại cho đến khi webkit được bật và chạy tức là cửa sổ trình duyệt đã được tạo. Điều này xảy ra sau khi Node khởi động, đó là lý do tại sao bạn bị lỗi . Để sử dụng số điện thoại nw
api, bạn có thể tạo các sự kiện có thể là nghe hoặc gọi các chức năng toàn cầu trước đây là thích hợp hơn. Các mã sau đây sẽ chứng minh cả hai và nên cung cấp cho bạn một ý tưởng tốt về cách Node
và WebKit
đang giao tiếp với nhau.
Ví dụ này tạo Cửa sổ, mở trình khám phá và cho phép bạn chuyển đổi màn hình . Nó cũng hiển thị vị trí chuột trong bảng điều khiển. Nó cũng chứng tỏ làm thế nào để gửi các sự kiện bằng cách sử dụng DOM tức là body.onclick() và gắn các sự kiện từ bên trong Node tức là chúng ta sẽ bắt các sự kiện minimize
và ghi chúng vào bàn điều khiển.
Để làm việc này, bạn cần sử dụng phiên bản SDK NW
. Đây là gói của tôi.json
{
"name": "hello",
"node-main": "index.js",
"main": "index.html",
"window": {
"toolbar": true,
"width": 800,
"height": 600
},
"dependencies" : {
"robotjs" : "*",
"markdown" : "*"
}
}
Hai tập tin bạn cần là index.html
<!DOCTYPE html>
<html>
<head>
<script>
var win = nw.Window.get();
global.win = win;
global.console = console;
global.main(nw);
global.mouse();
var markdown = require('markdown').markdown;
document.write(markdown.toHTML("-->Click between the arrows to toggle full screen<---"));
</script>
</head>
<body onclick="global.mouse();">
</body>
</html>
và index.js
.
var robot = require("robotjs");
global.mouse = function() {
var mouse = robot.getMousePos();
console.log("Mouse is at x:" + mouse.x + " y:" + mouse.y);
global.win.toggleFullscreen();
}
global.main = function(nw_passed_in) {
global.win.showDevTools();
console.log("Starting main");
console.log(nw_passed_in);
console.log(nw);
global.win.on('minimize', function() {
console.log('n: Window is minimized from Node');
});
}
Khi chạy này tôi đã sử dụng
nwjs --enable-logging --remote-debugging-port=1729 ./
Sau đó bạn có thể mở trình duyệt sử dụng
http://localhost:1729/
để gỡ lỗi nếu cần thiết.
Nếu bạn muốn làm điều gì đó ngay khi đối tượng nw
tồn tại, bạn có thể thăm dò ý kiến đó. Tôi muốn sử dụng eventEmitter, nếu bạn không muốn sử dụng bộ phát sự kiện, bạn có thể dễ dàng bọc nó trong một hàm và gọi nó theo cách đệ quy. Sau đây sẽ hiển thị số lượng phần nghìn giây trước khi đối tượng nw
được thiết lập. Trên hệ thống của tôi, nó dao động trong khoảng 43 - 48 mili giây. Sử dụng hàm đệ quy không khác nhau. Nếu bạn thêm mã này vào mã ở trên, bạn sẽ thấy mọi thứ được ghi vào bảng điều khiển.
var start = new Date().getTime();
var events = require('events');
var e = new events.EventEmitter();
var stop = 0;
e.on('foo', function() {
if(typeof nw === 'undefined') {
setTimeout(function() {
e.emit('is_nw_defined');
}, 1);
}
else {
if(stop === 0) {
stop = new Date().getTime();
}
setTimeout(function() {
console.log(stop - start);
console.log(nw);
e.emit('is_nw_defined');
}, 2000);
}
});
e.emit('is_nw_defined');
Đang chạy chức năng chính của nút khi WebKit tải một tùy chọn? –
@RahatMahbub Tôi đã hy vọng có một cách chính thức (có thể không có giấy tờ) để thực hiện điều này chỉ qua Node, như sự kiện toàn cầu.Điều này sẽ có ý nghĩa, nhưng nếu không có thì sau đó gọi lại từ trang html là lựa chọn duy nhất, tôi đoán. – estus
@estus Có một cách để làm điều đó nhưng tôi không nghĩ rằng đó là một cách đặc biệt gọn gàng. Tôi có thể thêm nó vào câu trả lời của tôi nếu bạn muốn. – Harry