2016-06-02 8 views
5

Ecco i link a parti specifiche dei documenti elettronici:Qual è la differenza tra BrowserWindow e <Webview> Tag in elettrone e quando è consigliabile utilizzarli?

Browser Window

Webview Tag

(Edit) Il caso d'uso stavo pensando è per esempio se voglio costruire un browser, sarebbe ogni pagina web in una scheda è un'istanza di una Webview o una BrowserWindow? O, ad esempio, se volessi creare un editor di programmazione e volessi visualizzare la pagina HTML visualizzata proprio accanto al codice, sarebbe una nuova BrowserWindow o una Webview?

+0

Cosa stai cercando di realizzare? BrowserWindows e s sono piuttosto diversi, il che rende questa una domanda difficile a cui rispondere. Se aggiungi ciò che stai cercando di fare in modo specifico, potrei essere in grado di aiutarti. – ccnokes

risposta

8

Posso capire perché sarebbe confuso su quale di questi ospitare i tuoi contenuti in date le loro somiglianze. Entrambi iniziano in processi separati e hanno molte configurazioni simili. La differenza fondamentale tra la BrowserWindow ed il WebView è che il BrowserWindow è una finestra sulla piattaforma ed una WebView è un elemento su una pagina web Questo può essere un po 'di un evidente, distinzione superficiale, ma molto delle loro differenze e usi ne derivano.

Gran parte delle ragioni per cui esiste una pagina Web è consentire l'incorporazione di contenuto non attendibile all'interno dell'applicazione. Se si leggono i casi d'uso per la visualizzazione Web, molti di essi indicano il fatto che BrowserWindow, per impostazione predefinita, ha accesso completo alle API del nodo. Ospitare contenuti non fidati al suo interno sta consegnando ai contenuti un accesso significativo al tuo sistema e presenta un problema di sicurezza. La visualizzazione Web, tuttavia, non ha l'integrazione Node attivata per impostazione predefinita, quindi protegge l'applicazione e la piattaforma dal contenuto ospitato.

Tuttavia, questa distinzione è un po 'una falsa pista poiché l'integrazione del nodo può essere disabilitata su BrowserWindow e può essere abilitata su un elemento webview. Vale a dire, dovresti essere in grado di ospitare in modo sicuro contenuti non affidabili in una BrowserWindow togliendo l'accesso a Node e ospitando contenuti attendibili in una visualizzazione web e fornendogli l'accesso al Nodo.

La chiave per la WebView è che permette l'embedding di contenuti non attendibile su una pagina web/view nell'applicazione. Se, all'interno della stessa vista/pagina, si desidera disporre di contenuto attendibile con accesso completo alle API del nodo e alcuni contenuti non attendibili e con accesso limitato o nullo alle API dei nodi, ciò può essere ottenuto solo con l'elemento webview . È un modo per separare e bloccare una parte di una pagina Web ospitata in una BrowserWindows e consentire al resto di essere aperta.

A parte l'incorporamento di contenuto non attendibile, l'unico altro caso a cui posso pensare di utilizzare le visualizzazioni Web su BrowserWindows è se si desidera aprire e visualizzare più processi separati in un'unica finestra. Un'applicazione potrebbe scegliere di creare 10 finestre differenti per 10 processi diversi e avere la piattaforma per gestire il layout, la messa a fuoco, ecc. Oppure aprire 1 finestra con 10 Webviews per 10 diversi processi e gestire il layout, il focus, ecc stesso all'interno di quella finestra.

(Edit) Per affrontare la modifica alla domanda:

Per entrambi i casi vi suggerirei di usare un WebView.

Nel primo scenario, un browser, hai menzionato "schede".Non esiste un metodo semplice e multipiattaforma che conosca per la creazione di applicazioni a schede che utilizzano più BrowserWindows perché le finestre sono create dal sistema operativo nativo. Tuttavia, è possibile ottenere questo risultato creando un'applicazione a schede in un'unica pagina Web, ciascuna scheda contenente una visualizzazione Web. In questo caso, è necessario assicurarsi che l'integrazione del nodo sia disabilitata nella visualizzazione Web (dovrebbe essere predefinita), poiché il caricamento del contenuto dal Web è generalmente non attendibile.

Il secondo scenario, un editor con HTML reso, non è così chiaro. Potresti usare una webview, un iframe o renderizzare il contenuto direttamente a un div. Il rendering diretto su un div può essere l'opzione migliore per qualcosa come Markdown o piccoli snippet di HTML, a patto che non sia necessario il css personalizzato o che si desideri eseguire JavaScript. In ogni caso, ha senso usare una webview o un iframe. La differenza è che una webview inizia in un processo separato e può avere l'integrazione del nodo o la sicurezza flessa mentre un iframe viene caricato nello stesso processo di BrowserWindow e, penso, ha bloccato la sicurezza. Indipendentemente da ciò, per ottenere un look side-by-side senza un'altra finestra è necessario utilizzare un elemento HTML come una webview e non una BrowserWindow.

+0

Grazie per la risposta! sicuramente chiarisce un sacco di confusioni che ho avuto. Un ulteriore follow-up (e farò anche una modifica alla domanda originale), ma se voglio visualizzare pagine web all'interno della mia app di elettroni (come per esempio un editor di testo che visualizza l'HTML reso di ciò che stai costruendo proprio accanto ad esso) dovrei usare una webview per visualizzare quella pagina? –

+0

Ho modificato la risposta. Fatemi sapere se questo ha senso o se ho bisogno di espandermi ulteriormente :-) –

+0

Grazie Shawn! Ha perfettamente senso –