/ / इलेक्ट्रॉन: मुख्य - जावास्क्रिप्ट, इलेक्ट्रॉन से कॉल रेंडरर फ़ंक्शन

इलेक्ट्रॉन: मुख्य - जावास्क्रिप्ट, इलेक्ट्रॉन से कॉल रेंडरर फ़ंक्शन कॉल करें

मेरे पास लोकलस्टोर में कुछ डेटा है जिसे डिलीट करना है app.quit()। लेकिन मुझे मुख्य प्रक्रिया से ऐसा करने का कोई रास्ता नहीं दिख रहा है।

क्या कॉल करने का कोई तरीका है renderer से कार्य main?

मुझे इसके बारे में मालूम है var remote = require("remote"); लेकिन यह गलत दिशा में ही जाता है।

उत्तर:

उत्तर № 1 के लिए 10

आप मुख्य प्रक्रिया से वेबकंटेंट्स के माध्यम से रेंडरर प्रक्रिया को संदेश भेज सकते हैं। जैसा कि यहां प्रलेखन में कहा गया है: https://github.com/atom/electron/blob/master/docs/api/web-contents.md#webcontentssendchannel-arg1-arg2-.

यहाँ है कि आप इसे डॉक्स से सीधे कैसे करते हैं:

मुख्य प्रक्रिया में:

// In the main process.
var window = null;
app.on("ready", function() {
window = new BrowserWindow({width: 800, height: 600});
window.loadURL("file://" + __dirname + "/index.html");
window.webContents.on("did-finish-load", function() {
window.webContents.send("ping", "whoooooooh!");
});
});

Index.html में:

<!-- index.html -->
<html>
<body>
<script>
require("electron").ipcRenderer.on("ping", function(event, message) {
console.log(message);  // Prints "whoooooooh!"
});
</script>
</body>
</html>

ध्यान दें कि यह एसिंक्रोनस है। मुझे यकीन नहीं है कि यह आपके विशेष समाधान के साथ चीजों को कैसे प्रभावित करता है, लेकिन यह कम से कम आपको रेंडरर प्रक्रिया से वापस बात करनी चाहिए।


जवाब के लिए 2 № 2

आप उपयोग कर सकते हैं BrowserWindow.webContents.executeJavaScript जैसे आपकी मुख्य प्रक्रिया में:

// will print "whoooooooh!" in the dev console
window.webContents.executeJavaScript("console.log("whoooooooh!")");

यद्यपि आप इसे थोड़े गंदे / गंदे दृष्टिकोण पर विचार कर सकते हैं, यह काम करता है। और इसके लिए रेंडरर प्रक्रिया में कुछ भी सेट करने की आवश्यकता नहीं होती है, जो मेरे लिए चीजों को बहुत सरल बनाता है।
यदि आप किसी विशेष विधि को कॉल करना चाहते हैं, तो इस तरह से लिखना संभव होगा।