2016-11-28 13 views
0

更新 「webview.executeScript」が見つかりましたが、私はカスタム関数にアクセスできません。外部に読み込まれたWebview内の要素を更新します。

これは大きな前進ですが、どんな提案も大歓迎です。

オリジナルポスト

我々は外部でホストWebページをロードするクロームOS用のキオスクのWeb拡張を開発しました。ページはwebviewにロードされます。このページには、毎日更新される動的情報が表示されます。 「マニュアル」アップデートをページにプッシュするために、私たちはキオスクアプリへのWebSocket接続を開いています。これにより、ページを更新したり、ページを更新したり、情報をプッシュしたりすることができます。しかし、webviewの内部にロードされたjavascriptにアクセスする必要があります。私はこの権利を説明しているかどうか、または私が求めていることをすることが可能かどうかはわかりません。

今はwebsocketサーバーへの2つの接続を開いています。 1つはウェブページからのもので、もう1つは内線からのものです。目標は1つの接続に切り分けることです。

擬似コードを追加して、私は何をする必要があるかを考えました。

document.onLoad({ 
    $("#page").html('<webview id="browser" src="example.com"></webview>'); 
}); 

function ReceiveWebSocketMessage(msg) { 
    switch (msg.cmd) { 
     case "updatedate": 
      $("browser").UpdateDate(msg.data); 
     break; 

     case "reboot": 
      chrome.runtime.RebootDevice(); 
      break; 
    } 
} 

ウェブページ:

<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <div id="page"> 

     </div> 
    </body> 
</html> 

キオスク例の背景JS (私はこれはjqueryの経由なんとかではないでしょう知っているノート)のindex.html

Chromeウェブ拡張キオスクexample.com

<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <div id="datetime"> 
      1/1/2016 
     </div> 
    </body> 
</html> 

ウェブページの例JS http://example.com/app.js

function UpdateDate(newdate) { 
    $("#datetime").html = newdate; 
} 

私は一緒に古いデザインはどのようなものであるかを簡単に図を投げたし、どのような新しいデザインです。

要約すると、私は外部ページにある機能にアクセスする必要があります。私はそれを達成しようと運がなかった。解決済み

enter image description here

答えて

0

!私は、次の例を見つけました: https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples/webview-samples/shared-script

基本的に私は私のコードにこれを追加しました:

function Execute(code) { 
    var webview = document.querySelector('webview'); 

    webview.executeScript({ 
     code: generateScriptText(code) 
    }); 
} 

function generateScriptText(fn) { 
    var fnText = fn.toString() 
     .replace(/"/g, '\\"') // Escape double-quotes. 
     .replace(/(\r?\n|\r)/g, '\\n'); // Insert newlines correctly. 

    var scriptText = 
     '(function() {\n' + 
     ' var script = document.createElement("script");\n' + 
     ' script.innerHTML = "(function() { (' + fnText + ')(); })()" \n' + 
     ' document.body.appendChild(script);\n' + 
     '})()'; 
    return scriptText; 
} 
関連する問題