更新外部加载的Webview

时间:2016-11-28 15:58:41

标签: javascript jquery html google-chrome webview

更新 我找到了' webview.executeScript'但是,我无法访问任何自定义功能。

这是向前迈出的重要一步。欢迎任何建议。

原帖

我们为Chrome操作系统开发了一个Kiosk Web Extension,用于加载外部托管的网页。该页面已加载到 webview 中。此页面显示每日更新的动态信息。为了推动"手册"更新到页面,我们维护与Kiosk应用程序的开放WebSocket连接。这允许我们刷新页面,更新页面,推送信息等。但是,我们需要访问webview中加载的javascript或者我们需要访问元素。我不确定我是否正确解释这一点,或者是否可以按照我的要求行事。

现在我们正在打开两个连接到websocket服务器的连接。一个来自网页,另一个来自扩展。目标是减少一个连接。

我添加了伪代码,以便了解我需要做什么。

Chrome网络扩展程序Kiosk index.html

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

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

Kiosk示例背景js (注意:我知道这不可能通过jquery实现)

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;
    }
}

网页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

1 个答案:

答案 0 :(得分: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;
}