2017-10-27 13 views
-1

안녕하세요 내가 browser로 세 JS 파일, main.js, browser로inject.js을 가지고 내 프로젝트의 모든 전 내 webview 및 많은 기능과 관련된 모든 클릭 동작을 구현했습니다. 나는 클릭 동작을 통해 웹 페이지에서 Username을 얻었습니다.이 웹 페이지는 기능을 만들었습니다. inject.js에서 내용과 요소를 가져옵니다. 페이지에 내가 값을 가지고 Inject.js 파일에 있지만 Browser.js 파일을 내가 gettin g 정의되지 않은 값 여기 전자에 webview.executeJavaScript에서 반환 값을 얻는 방법을

내 샘플 코드

:

browser로

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; 


}, 

값은 inject.js에서 호출하기 만하면 웹보기에 JS 코드를 주입 ​​리조트 이유 browser로 정확히 확인 정의되지 않은

답변

2

을하지 반환하지만 왜 ... 그것이 XY problem하지 있는지 확인합니다.

  1. webview.executeJavascript() 메서드는 아무 것도 반환하지 않습니다. 콜백을 3 번째 인수로 전달할 수 있습니다 (아래에서 자세히 설명).하지만 실행 된 코드에서 아무 것도받지 못한다고 생각합니다.

  2. 삽입 된 코드에서는 준비가 완료 될 때 실행될 콜백을 작성합니다. 따라서 함수 (예 : url 변수)에 의해 반환 된 모든 항목은 콜백 코드에 의해 아직 영향을받지 않습니다. 반드시 당신이

만약 내가 제대로 이해하고 How to return the response from an asynchronous call?, 당신은 임베디드 페이지에서 일부 데이터를 폐기하려는 이해하고 있는지 확인하고 렌더러 (브라우저)로 다시 보내.

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

, 당신은 require(electron)을 할 수 inject.js에서, 그리고 사이의 통신에 전자 IPC 방식 (electron.ipcRenderer)를 사용하여이 결과를 달성

더 적절한 방법은 전자 <webview>preload 속성을 사용하는 것입니다 Webview (ipcRendrer.sendToHost()) 및 "상위"렌더러. 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') 
}) 

당신이 렌더러 및 웹보기, 예를 들어, 사이의 이러한 통신에 대한 자세한 튜토리얼을 찾을 수 있어야합니다 : 당신이 간단한 예제를 가지고 https://ourcodeworld.com/articles/read/201/how-to-send-retrieve-information-and-manipulate-the-dom-from-a-webview-with-electron-framework