how to get return-Wert von webview.executeJavaScript Elektron

Hallo alle in meinem Projekt habe ich drei js-Dateien, main.js,browser.js und inject.js, in browser.js ich haben bisher alle die auf Aktion mit meinem webview und vielen Funktionalitäten, von diesem habe ich ein klicken Sie auf Aktion zu erhalten Benutzername von der Webseite geladen wird, ist im webview für die, die ich erstellt eine Funktion in inject.js, um zu bekommen Inhalt und Elemente von der Seite hab ich den Wert in Inject.js Dateien aber in Browser.js Dateien bekomme ich Undefinierte Werte

hier mein Beispiel-code:

browser.js

var proName = webview.executeJavaScript('__myInjection.profileName()');

inject.js

profileName : function (){
var recordArray = []
var url
var script = document.createElement("script");
script.src = require('./jquery-3.2.1.min.js');

  $(document).ready(function() {
 url = $("[data-control-name='identity_profile_photo']").attr("href");
alert(url)
  });

return url;


},

Werte immer genannt inject.js aber browser.js gibt Undefined Werte

InformationsquelleAutor batMan007 | 2017-10-27



One Reply
  1. 8

    Nicht genau sicher, warum Sie das resort zu injizieren JS-code in eine WebView, aber warum nicht… es ist sicher nicht ein XY-problem.

    1. webview.executeJavascript() Methode nichts zurück. Können Sie ein Rückruf als 3. argument (mehr dazu weiter unten), aber ich glaube nicht, es erhält alles von den ausgeführten code.

    2. In deinem eingefügten code, erstellen Sie eine callback ausgeführt werden auf der Seite bereit. Daher etwas zurückgegeben von Ihrer Funktion (wie Ihr url variable), die nicht betroffen waren, noch durch den callback-code. Stellen Sie sicher, dass Sie verstehen, Wie die Antwort zurückgegeben wird von einem asynchronen Aufruf?

    Wenn ich das richtig verstehe, versucht du Sie zu verschrotten, einige Daten, die auf der embedded-Seite, und senden Sie es zurück zu Ihrem Renderer (browser).

    Einen besser geeigneten Weg zur Erreichung dieses Ergebnis wäre, die Nutzung preload Attribut des Elektrons <webview>:

    <webview src="urlToGuestPage" preload="./inject.js"></webview>

    In inject.js können Sie require(electron), und verwenden Sie die Elektronen-IPC-System (electron.ipcRenderer) für die Kommunikation zwischen den Webview (ipcRendrer.sendToHost()) und die „Eltern“ – Renderer. Sie haben ein einfaches Beispiel: https://electron.atom.io/docs/api/webview-tag/#event-ipc-message

    //In embedder page. (parent Renderer /browser.js)
    const webview = document.querySelector('webview')
    webview.addEventListener('ipc-message', (event) => {
      console.log(event.channel)
      //Prints "pong"
    })
    webview.send('ping')
    
    //In guest page. (preload script for the webview /inject.js)
    const {ipcRenderer} = require('electron')
    ipcRenderer.on('ping', () => {
      ipcRenderer.sendToHost('pong')
    })

    Sollten Sie in der Lage sein, detaillierte tutorials für die Kommunikation zwischen Renderer und ein webview, z.B. https://ourcodeworld.com/articles/read/201/how-to-send-retrieve-information-and-manipulate-the-dom-from-a-webview-with-electron-framework

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.