【问题标题】:Automatically jump to a certain part of a WebView自动跳转到 WebView 的某个部分
【发布时间】:2016-10-06 10:49:48
【问题描述】:

我正在制作一个 Chrome 应用程序,并且我正在使用类似于 iframe 的 web 视图标签。

有没有办法将网页视图中的网页加载到一半?

我试过了:

<webview onLoad="window.scroll(0, 150)" class="test" src="http://example.co.uk/test.aspx"></webview>

但这似乎远非易事。我不相信它甚至可能。

谢谢

【问题讨论】:

  • 这里给你一个提示:假设代码将在 webview 加载时执行(它不会,但这是一个单独的问题),window 指的是什么?

标签: javascript jquery html webview google-chrome-app


【解决方案1】:

假设代码会执行(它不会因为CSP),window 将引用应用程序的页面,而不是嵌入的页面。

您需要在嵌入页面的上下文中执行代码。

如果您之前使用过 Chrome 扩展程序,您会知道与网页内容交互的部分称为Content Script

应用程序对&lt;webview&gt; elements 有类似的概念。您可以预先声明哪些页面在加载时应该获取哪些内容脚本,也可以显式加载内容脚本。

所以,假设您有一个文件content.js,其内容如下(请原谅双关语):

window.scroll(0, 150);

另外,假设您在应用页面中运行了一个脚本app.js,并且变量webview 是对其中&lt;webview&gt; 的引用。

然后,你可以让webview执行它:

  • 以声明方式,通过调用webview.addContentScripts加载页面(例如,在从app.js 代码设置src 之前):

    // Assuming <webview id="wv"></webview>
    var webview = document.getElementById("wv");
    webview.addContentScripts([{
      name: "ExampleRule",
      matches: ["http://example.co.uk/*"], // can be as narrow as you wish
      js: ["content.js"]
    }]);
    webview.src = "http://example.co.uk/test.aspx";
    
  • 明确地,当页面已经加载时:

    // Assuming <webview id="wv" src="http://example.co.uk/test.aspx"></webview>
    var webview = document.getElementById("wv");
    webview.executeScript({file: "content.js"});
    

当然,可以使content.js 更加复杂(例如,从应用程序接收命令)和/或更精确地控制您的操作时间 - 但目前这些是通用内容脚本问题您可以在其他地方找到解决方案或提出新问题。

【讨论】:

  • 为什么需要2个js文件?
  • 每个上下文一个文件?您有 2 个嵌套文档,即您的应用页面和嵌入页面。一个脚本只“在”一个文档中,在这两种情况下重复使用一个脚本通常是个坏主意。
  • 不,我知道我以为你说我应该制作一个 content.js 和一个 app.js。我应该把所有的 JavaScript 都放在我当前的 JS 文件中吗?
  • 这是一个类比。假设您有一个算法可以在商店购物并理发。无论您是走进商店还是美发沙龙,您是否应该将它们粘在一起并尝试执行所有步骤?最好将它们(逻辑上)分开。在应用程序中,甚至还有第三个脚本,即背景脚本,用于另一个上下文。再次,分开。所以,是的,我是说你需要(至少)3 个单独的文件,除非你想要复杂的切换逻辑“让我们看看我是否在商店”。
  • 注意:您可以使用executeScriptcode 参数来代替单独的文件来实现这样一个微不足道的单行。但总的来说,如果你有一个单独的文件,它会更干净,而且你必须为addContentScripts使用单独的文件@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多