更新 我找到了' 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;
}
我汇总了旧设计的概况和新设计的简要图表。
总结一下,我需要访问外部页面上的功能。我没有运气试图完成它。
答案 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;
}