从 webviews Javascript 调用 C++ 方法

2023-12-07

在 qt4 qml qtwebkit 1.0 组件 webview 有一个属性javaScriptWindowObjects。我用它来将 javaScriptWindowObjects 添加到我的网页 javascript 的上下文中以调用 C++ 函数。像这样

WebView{
    url: "http://test.com"
    anchors.fill: parent
    scale: 1.0

    javaScriptWindowObjects: QtObject {
        WebView.windowObjectName: "native"

        function foo(x, y) {
             console.log("This is a call from javascript");
             myCppHandler.fooNative(b,c);
         }
    }
}

所以我可以像这样从网页 javascript 调用它

<script type="text/javascript">
    native.foo(1,2)
</script>

但在 qt5 qml qtwebkit 3.0 中没有这样的东西javaScriptWindowObjects

我怎样才能在 qt5 qml 中实现这一点?


只是为了记录一下完成此操作:

import QtQuick 2.0
import QtWebKit 3.0
import QtWebKit.experimental 1.0

Rectangle {

   width: 1024
   height: 768

   WebView{
       url: "http://localhost"
       anchors.fill: parent

       experimental.preferences.navigatorQtObjectEnabled: true
       experimental.onMessageReceived: {

           console.debug("get msg from javascript")
           experimental.postMessage("HELLO")
       }
   } // webview
} // rectanlge


<html>
<body>
<h1>It just works!</h1>

<p>Play with me...</p>

<button onclick="nativecall();">test</button>
<div id="out"></div>

<script type="text/javascript">
    function nativecall(){
        console.log("will try native call");
        var elem = document.getElementById("out").innerHTML="clicked";
        navigator.qt.postMessage('this is a js call');
    }

    function jsCall(message){
        var elem = document.getElementById("out").innerHTML="and the other way around " + message;
    }

    navigator.qt.onmessage = function(ev) {
        jsCall(ev.data);
    }
</script>

</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 webviews Javascript 调用 C++ 方法 的相关文章

随机推荐

  • 如何获取某个 URL 的总点赞数(点赞数和分享数)?

    我在页面上放置的 Likes 插件会显示直接单击按钮的次数 以及页面 URL 被共享或点赞被评论的次数 不过 当我使用 Graph API 查看我的对象时 它只显示直接 点赞 点击的数量 这是一个示例对象 id 17678692xxxxxx
  • python/scipy 中的多元样条插值?

    是否有库模块或其他简单的方法来在 python 中实现多元样条插值 具体来说 我在规则间隔的三维网格上有一组标量数据 我需要在分散在整个域中的少量点处对其进行插值 对于二维 我一直在使用scipy interpolate RectBivar
  • 将字符串发送到serial.to_bytes不起作用

    我正在尝试发送包含命令的字符串变量 像这样 value 0x31 0x0a 0x32 0x0a 0x33 0x0a self s write serial to bytes value 上面那个失败了 不会给出任何错误 但是当我发送这样的值
  • ASP.NET Core 6:允许Azure AD身份验证和本地身份验证

    我正在开发一个程序 该程序允许用户以两种方式进行身份验证 他们可以通过任何电子邮件创建和使用本地 自制 帐户 或者他们可以仅对我们的组织使用 Azure AD OAuth 无论使用哪种身份验证方法 用户都应受到相同的对待并返回 trueco
  • 令人困惑的 gprof 输出

    I ran gprof在一个 C 程序上16 637s 根据time 我得到了第一行输出 cumulative self self total time seconds seconds calls s call s call name 31
  • 如何在 ASP.Net MVC 中的文本框中显示水印而不是值?

    在我看来我有 pounds when I run the application I got in my text box When I delete the value from the textbox it will show wate
  • 在端口 587 (TLS) 上使用 CDO 发送电子邮件时出错

    在端口 587 使用 TLS 安全协议的端口 上使用 CDO 发送邮件有什么技巧吗 这是我的 C 代码 CDO IMessagePtr iMsg uuidof CDO Message CDO IConfigurationPtr iConf
  • MicrosoftAccount 访问 Azure 移动服务 API 的桌面客户端流程

    我关注了阿德里安 霍尔斯book创建具有移动服务 API 后端的跨平台应用程序 我已成功从 Android iOS 和桌面 WPF 客户端对后端进行不安全的访问 我将继续使用 Authorize 属性为 API 添加安全性 我想使用 Mic
  • 如果未设置用户电子邮件,如何进行 git 块提交?

    我有单独的电子邮件地址用于工作项目和开源项目 并且我想确保为每种类型的项目使用正确的电子邮件地址 显然 解决方案是适当地设置存储库特定配置 不幸的是 我一直忘记设置它 直到我进行了一些提交 所以我使用全局 user email 配置 如果与
  • Perl 精确字符串匹配

    我有以下 Perl 代码来提示用户回答是 否 如果用户输入除 是 否 以外的任何内容 请继续提示 没有其他词是可以接受的 我不知道为什么这段代码不起作用 我用答案 noooooo 进行了测试 我希望它再次提示 但它没有进入 while 循环
  • 您可以在Python中请求MacOS屏幕录制权限吗

    有没有办法让 MacOS Python 应用程序 使用 Pillow 和 ImageGrab 像其他 C 应用程序一样请求屏幕录制权限 看https developer apple com documentation avfoundatio
  • 如何在没有作业运行时自动停止 SQL Server 代理?

    我在一个实例中有大约 40 个不同的 SQL Server 作业 他们都有不同的时间表 有些每天运行一次 有些每两分钟运行一次 有些每五分钟运行一次 如果我需要停止 sql server 代理 如何找到没有作业运行的最佳时间 这样我就不会中
  • 发布新版本的 Google 表格插件

    我已经发布了一个供内部使用的 Google Sheets 插件 有用 但我似乎无法发布新版本 我正在关注这个 https developers google com gsuite add ons how tos manage addons
  • 来自 MPMediaItem 的 NSData

    谁能帮助我如何将从设备媒体库中选择的歌曲转换为 NSData 我需要一个接受媒体项并返回该特定媒体项的 NSData 的函数 提前致谢 您可以使用此代码 MPMediaItem item obtain the media item NSAu
  • 如何向 sqlalchemy 中的表添加自定义的任意选项?

    我正在尝试使用 sqlalchemy 创建一个表declarative base我想补充一点cockroachdb s INTERLEAVE IN PARENT option CREATE TABLE orders customer INT
  • 将字符串转换为日期时间

    如何将字符串转换为类似 01 01 1970 00 03 44 到约会时间 保持简单new Date string 这应该可以做到 const s 01 01 1970 00 03 44 const d new Date s console
  • HTML5 Web Audio API,从 javax.sound 移植并出现失真

    我需要动态生成音频 不能从 wav 或 mp3 文件生成 幸运的是 新的 WebAudio API FF4 和 Chrome 13 提供了此功能 我有一些 Java 代码正在移植到 Javascript 如下所示 byte buffer n
  • 为什么我无法在 React.js 中推送状态数组中的值?

    我可以将 1 项添加到它记录的数组中 50 在控制台中 但是当我尝试添加第二个值时 我收到此错误 currentScores push 不是函数 这样的做法是错误的吗 class Scores extends Component const
  • 他们有什么方法可以在 flutter 中将 .jpeg 图像转换为 .gif 吗?

    就像我的标题一样 有没有办法在 flutter 中将图像转换为视频 不一定是 gif 更具体地说 我使用 Google Firebase 作为我的存储云服务器来上传 flutter 的相机插件拍摄的照片 我想将图像转换为视频 使其看起来像延
  • 从 webviews Javascript 调用 C++ 方法

    在 qt4 qml qtwebkit 1 0 组件 webview 有一个属性javaScriptWindowObjects 我用它来将 javaScriptWindowObjects 添加到我的网页 javascript 的上下文中以调用