2015-10-19 59 views
1

在我的電子應用程序中,我從遠程URL(「http://xxxx/index.html」)加載遠程頁面(index.html),然後我試圖發送一個ipc事件到主進程然後處理它,並失敗,但如果我把index.html放在本地fs中,這是可以的。如何從電子遠程頁面訪問節點api?

所以我的問題是如何使頁面從遠程頁面訪問節點api(如require,ipc等)。

------(主處理)

mainWindow = new BrowserWindow({width: 800, height: 600}); 
    // and load the index.html of the app. 
    mainWindow.loadUrl('http://localhost:8080'); 
    //mainWindow.loadUrl('file://' + __dirname + '/index.html'); 
var ipc = require('ipc'); 
    ipc.on('spawn-ext-process', function() { 
    console.log("spawn-ext-process"); 
}); 

http://localhost:8080/index.html ---------(呈現進程)

<script> 
    var ipc = require('ipc'); 
    ipc.send('spawn-ext-process'); 
</script> 
+1

即使使用Electron,也無法訪問遠程頁面中的節點。這將是非常危險的。 –

回答

2

AFIAK的IPC API不使用HTTP。它本質上是從本地機器上運行的程序的一部分發送信號到該機器上相同程序的另一部分。

如果你想通過http發送信號,你可能需要使用類似socket.iowebsockets的東西。

1

如何使頁面能夠從遠程頁面訪問節點API(如require,ipc等)?

取決於您如何加載頁面。如果您在BrowserWindow實例上使用loadUrl,則默認啓用節點集成(您可以通過nodeIntegration選項禁用它,請參閱docs)。

如果您使用的是<webview>標記,那麼默認情況下它會被禁用,您可以通過nodeintegration屬性啓用它。請參閱docs。請注意,通過webview,您可以預加載可安全訪問節點和電子API的腳本,然後在腳本執行完成後即可銷燬對這些對象的訪問(請參閱here)。

就像@FelipeBrahm所說,我不會給遠程頁面訪問node.js或電子API,除非它是你自己的頁面,即使你這樣做,也要謹慎。