2012-06-21 9 views
6

Il javascript sta stampando la HTML sulla pagina di esempio di seguito, è possibile chiamare una funzione C su di esso per esempio in C per convertire qualcosa in un'altra lingua esiste una funzione LANG_Str("text") che converte il testo nella lingua specificata. Sarebbe possibile usare questa funzione nel testo qui sotto all'interno di Javascript ?.Calling funzioni C all'interno javascript

"<tr><th>Service</th><th>Target Allocation (%)</th><th></th>" 

EDIT:

praticamente sto volendo fare una traduzione in linguaggio umano. Il sito supporta già multi-lingua, il problema è nella schermata personalizzata come quella mostrata sopra che viene generata in Javascript, non è possibile utilizzare la funzione utilizzata per tradurre il testo come è normalmente eseguita in C.

+0

Da un browser Web? No. – Pointy

+0

Come viene generata questa stringa? Se lo stai generando da 'C', allora sì, puoi farlo. Se lo stai generando da JavaScript, allora no. –

+0

Hai bisogno di implementare l'i18n della tua app? Dovrebbe essere fatto in un altro modo ... –

risposta

5

Se è in esecuzione in il browser: no. Scusate.

Si potrebbe essere in grado di farlo in anticipo sul codice lato server (ad esempio Python o PHP che possono chiamare C) quando si mette insieme il contenuto della pagina. In alternativa è possibile effettuare una richiesta AJAX su un server che espone la funzione C come API/endpoint HTTP (tramite, GCI, FCGI o Python/PHP/Perl). Ma non nel browser.

Questo perché JS viene eseguito in un ambiente virtuale sandboxing che non ha accesso alle chiamate di sistema o altro al di fuori del runtime.

EDIT

In risposta al tuo commento "Lo script è stato eseguito in C utilizzando HTML_WriteToCgi", questo suggerisce che si sta mettendo insieme il codice HTML in C sul server. Se questo è corretto, vai alla mia opzione 1 sopra, iniettando i valori direttamente nel codice sorgente JS se tutti i valori emergono da alcuni dati noti al server.

Si potrebbe prendere in considerazione lo spostamento di alcune funzionalità dal browser JS e di nuovo nel codice lato server per risolvere il problema.

+0

Sarebbe una buona idea spostare tutto il codice JS e invece solo WriteToCgi il codice javascript ?, questo dovrebbe permettermi di chiamare la funzione all'interno. – ahmet

+0

Questo è certamente possibile, sì. In alternativa, se si sta chiamando una funzione di localizzazione in JS e si conoscono tutti i valori che verranno utilizzati, è possibile creare una mappa JavaScript di stringhe su valori tradotti e simulare l'input/output della funzione C. – Joe

+1

Questa risposta non è del tutto corretta: è possibile [compilare C su JavaScript lato client] (http://faantasticcoder.blogspot.com/2013/05/calling-c-function-from-javascript-in.html) usando EngScripten. –

2

JavaScript non può accedere direttamente a nessun altro processo, ma è possibile effettuare una richiesta server per le informazioni. Il server può chiamare una funzione C se necessario.

Alla fine, non è JavaScript che chiama la funzione C, è il server (e qualsiasi lingua stia usando: Python, PHP, ASP.NET, JSP, ecc.) Che chiamerebbe la funzione C.

2

È possibile effettuare una richiesta speciale, in modo che il server Web possa utilizzare tale richiesta e inviarla alla pagina Web.

+1

Per favore, metti un po 'di impegno nella risposta. –

0

È possibile creare un RESTful web service sul server che riceverà il testo di origine e l'ID lingua di destinazione, quindi restituirà il testo tradotto. Potresti quindi accedervi dalla tua pagina web tramite ajax call.

0

La mia interpretazione è che il tuo obiettivo è chiamare una funzione C in HTML/Javascript e catturare l'output.

Quello che potresti fare è creare una VM. Fondamentalmente, hai un'enorme "memoria" di array, un paio di "registri", ecc ... La parte più difficile è assicurarti che il set di istruzioni e i bytecode dei tuoi mirror VM un set di istruzioni comuni che c'è un compilatore C per. Compilare il codice C che VM sul computer, salvarlo in un file ed eseguirlo sulla VM.Se ciò è troppo difficile, è sufficiente ottenere un convertitore da C a assembly e solo definire un paio di istruzioni Assembly. C'è un Linux emulator in puro javascript senza chiamate server che fa esattamente questo.