zoukankan      html  css  js  c++  java
  • 使用CefSharp在.Net程序中嵌入Chrome浏览器(五)——Javascript交互

    要在CEF中和网页的JS进行交互,首先我们要通过设置启用Javascrit集成功能。

    CefSharpSettings.LegacyJavascriptBindingEnabled = true;

     

    调用JavaScript:

    简单的调用JavaScript可以直接使用ExecuteScriptAsync扩展函数。

    _chrome.ExecuteScriptAsync("alert('hello world')");

    实际上,JavaScript是具体到frame的,上述代码等价于

    _chrome.GetMainFrame().ExecuteJavaScriptAsync("alert('hello world')");

    调用JavaScript返回值:

    我们也可以使用EvaluateScriptAsync扩展函数执行javascript并获取返回值。

    var rsp = await _chrome.EvaluateScriptAsync("3+2*5");
    if (rsp.Success)
    {
        MessageBox.Show(rsp.Result.ToString());
    }

    也可以具体到frame:

    _chrome.GetMainFrame().EvaluateScriptAsync("3+2*5")

     

    JavaScript回调:

    要Javascript回调,首先得注入一个对象。

    public class AsyncBoundObject
    {
        public int Div(int divident, int divisor)
        {
            return divident / divisor;
        }
    }
    _chrome = new ChromiumWebBrowser();
    _chrome.RegisterAsyncJsObject("cef"new AsyncBoundObject());
    _chrome.Address = "http://tianfang.cnblogs.com";

    注意: 这个注入得再加载网页之前,否则可能网页无法加载注入的js。

    注入的函数是异步返回的,因此返回的是一个Promise对象,我们调用的时候可以使用ES6的await方式。

    await cef.div(4, 2)

    关于js注入更多信息,可以参看这个网页。how-do-you-expose-a-net-class-to-javascript

  • 相关阅读:
    python 小爬虫
    动态规划,网易秋招
    leetcode 3
    leetcode 27 水
    leetcode 21 list merge
    leetcode 15 3sum & leetcode 18 4sum
    leetcode 389 map iterator 的使用
    [转]使用flask实现mock server
    python __str__repr__ 区别
    Robot Framework 源码阅读 day2 TestSuitBuilder
  • 原文地址:https://www.cnblogs.com/TianFang/p/9902795.html
Copyright © 2011-2022 走看看