【问题标题】:Clicking on the link inside the Geckofx webbrowser will trigger the method in Winforms点击 Geckofx 网络浏览器内的链接将触发 Winforms 中的方法
【发布时间】:2020-01-31 22:43:18
【问题描述】:

有一个名为“test.html”的 HTML 文件和两个链接。这个 HTML 文件在geckoWebBrowser1 中显示如下:

<!DOCTYPE html>
<html>
<head lang="tr">
    <meta charset="UTF-8">
    <title>Test HTML</title>
</head>
<body>
<p><a href="#" id="open_file" class="open-file button" onclick="openFile()">Open A PDF file...</a></p>
<p><a href="#" id="go_to_articles" class="go-to-articles button" onclick="goToArticles()">Go to articles...</a></p>
</body>
<script>
    function openFile()
    {
        // What should I write here?
    }

    function goToArticles()
    {
        // What should I write here?
    }
</script>
</html>

这里是winforms的内容:

using System;
using System.Windows.Forms;
using Gecko;

namespace Test
{
    public partial class Frm1 : Form
    {

        public Frm1()
        {
            InitializeComponent();

            Xpcom.Initialize("Firefox64");
        }
        private void Frm1_Load(object sender, EventArgs e)
        {
            FormBorderStyle = FormBorderStyle.None;

            geckoWebBrowser1.Navigate("start\\test.html");
        }

        public void OpenPDFFile()
        {
            var ofd = new OpenFileDialog { Filter = @"PDF |*.pdf", Title = @"Select a PDF file..." };
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                // Here, action will be taken regarding the selected file.
            }
        }
    }
}

当我点击 HTML 文件中的Open A PDF file ... 链接时,必须在 Winforms 中触发OpenPDFFile 方法并从对话框中选择 PDF 文件,但我无法这样做。然而,我想通过单击 HTML 文件中的 Go to articles ... 链接来查看位于 Winforms 中的“FrmArticles”表单,但到目前为止我还没有实现。

【问题讨论】:

    标签: c# winforms webbrowser-control geckofx


    【解决方案1】:

    它源自answerError in 'AddMessageEventListener' on GeckoFX 的问题。

    <!DOCTYPE html>
    <html>
    <head lang="tr">
        <meta charset="UTF-8">
        <title>Test HTML</title>
    </head>
    <body>
    <p><a href="#" id="open_file" class="open-file button" onclick="fireEvent('openFiles', 'SomeData');">Open A PDF file...</a></p>
    <p><a href="#" id="go_to_articles" class="go-to-articles button" onclick="goToArticles()">Go to articles...</a></p>
    </body>
    <script>
    function fireEvent(name, data)
    {
        var event = new MessageEvent(name,{'view': window, 'bubbles': false, 'cancelable': true, 'data': data});
        document.dispatchEvent(event);
    }
    </script>
    </html>
    

    Form.cs 内容,

    using System;
    using System.Windows.Forms;
    using Gecko;
    
    namespace Test
    {
        public partial class Frm1 : Form
        {
    
            public Frm1()
            {
                InitializeComponent();
    
                Xpcom.Initialize("Firefox64");
            }
            private void Frm1_Load(object sender, EventArgs e)
            {
                FormBorderStyle = FormBorderStyle.None;
    
                geckoWebBrowser1.Navigate("start\\test.html");
                AddMessageEventListener("openFiles", showMessage);
            }
    
    
            public void AddMessageEventListener(string eventName, Action<string> action)
            {
                geckoWebBrowser1.AddMessageEventListener(eventName, action);
            }
    
            private void showMessage(string s)
            {
                var ofd = new OpenFileDialog { Filter = @"PDF |*.pdf", Title = @"Select a PDF file..." };
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show(ofd.FileName);
                }
    
            }
        }
    }
    

    在示例中,您可以根据需要使用字符串“SomeData”作为参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多