6

在 Electron<webview> 文档中,有一个可以与对象一起使用的方法列表。当我尝试运行任何方法时,它们都不起作用。当我在检查器中检查元素的属性时<webview>,它说它的原型是webview. ( __proto__ : webview)

所有方法都存储在该原型中。myWebview.openDevTools()因此,当我使用这些方法(例如)时,我的元素基本上应该从其原型中继承这些方法。

然而!当我使用时,Object.getProptotypeOf(myWebview)我得到HTMLElementwebview不像它在检查器中显示的那样。

这是我的代码示例:

<webview id="myWebview" src="path/to.file"></webview>

<script> 
  var myWebview = document.getElementById('myWebview');
  console.log("myWebview: ",myWebview);
  console.log("prototype: ",Object.getPrototypeOf(myWebview)); //=> HTMLElement
  myWebview.openDevTools();
</script>
4

2 回答 2

9

我发现了这个问题并在电子文档中添加了一个示例

最重要的是,您需要向 webview 添加一个侦听器,该侦听器在 webview 元素准备好时进行侦听:

webview.addEventListener("dom-ready", function(){
  webview.openDevTools();
});

根据@Shwany,webview 的方法将在did-start-loading事件触发时可用,但是最好等到 webview 元素完全准备好使用dom-ready


更详细的解释:

当窗口最初渲染 DOM 时,webview 方法不可用。最初,<webview>元素的原型仍然是通用的HTMLElement

在页面呈现之后,<webview>元素开始加载,然后其原型更改为 webview 原型(与元素同名)。当它获得对 webview 原型的访问权时,它就获得了对所有 webview 原型方法的访问权。

于 2015-06-14T00:40:38.630 回答
2

webview 的文档说:

如果您想以任何方式控制访客内容,您可以编写 JavaScript 来侦听 webview 事件并使用 webview 方法响应这些事件。

关闭这条线索,我可以使用以下代码在 webview 上调用 openDevTools:

  <script> 
  var myWebview = document.getElementById('myWebview');
  myWebview.addEventListener("did-start-loading", function (e) {
    myWebview.openDevTools();      
  });
  </script>  

我猜这些方法没有立即应用于 webview。我尝试在 document.readystate == "complete" 上访问它们,但它们仍然不可用。希望绑定到上面的事件将为您提供所需的功能。

于 2015-06-13T14:11:35.777 回答