我开发了一个outlook add(自定义任务窗格),用户控件中有Web浏览器。
当我在网页浏览器的文本框中写东西时,所有东西都在退格或删除按钮旁边工作得很好,我不能使用这些密钥,我错过了什么?
答案 0 :(得分:2)
好的我解决了这个问题,
问题是自定义任务窗格并不总是从outlook中获取fucos。
因此,每次为所有窗格都有“onclick”时,我都会引发一个事件,然后强制窗格成为焦点。
答案 1 :(得分:2)
我迟到了几年,但我设法解决了这个问题。解决此问题的最简单方法是确保对输入字段进行适当的关注,因此您需要能够在正在加载的任何页面上运行您自己的javascript。
我在页面上运行的javascript如下(使用jQuery):
$(document).on("click", function (e) {
// first let the add-in give focus to our CustomTaskPane
window.external.focus();
// then in our web browser give focus to whatever element was clicked on
$(e.target).focus();
});
window.external变量包含从插件运行的代码(我认为是c#或VB),它是公开的,因此我们可以从网页进行交互回到加载项。
在自定义任务窗格的加载项代码中设置window.external的上下文:
// event when webBrowser is finished loading document
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// sets context of window.external to functions defined on this context
webBrowser1.ObjectForScripting = this;
}
一种公共聚焦方法:
// can be called by the web browser as window.external.focus()
public void focus()
{
this.Focus();
}
这对我有用,我希望它能帮助别人。虽然请注意,如果用户键盘使用tab导航,这可能不起作用,但您可以为该用例扩展此代码,或者安全地假设平均outlook用户将他的手粘在鼠标上。
答案 2 :(得分:0)
原来这是一个很容易解决的问题。
只需写下
class MyBrowser : WebBrowser {}
然后使用MyBrowser而不是.NET。
答案 3 :(得分:0)
花了很多时间试图让这个在 Outlook v16.0.13801.20288 中工作,以上对我不起作用。我最终得到了这个工作代码。
创建一个用户控件并将您的浏览器控件添加到其中,然后自定义 .cs 如下
private void CreateTaskPane() {
MyWinFormUserControl webBrowser = new MyWinFormUserControl();
webBrowser.webBrowser3.Url = new Uri("https://google.com");
webBrowser.webBrowser3.Width = 500;
webBrowser.webBrowser3.Dock = DockStyle.Fill;
webBrowser.webBrowser3.Visible = true;
webBrowser.Width = 500;
webBrowser.Dock = DockStyle.Fill;
webBrowser.Visible = true;
this.CRMTaskPaneControl = CustomTaskPanes.Add(webBrowser, "My App");
//Components.WebViewContainerWPFUserControl webView = (Components.WebViewContainerWPFUserControl)_eh.Child;
//webView.webview.Source = new Uri("https://localhost:3000");
this.CRMTaskPaneControl.Width = 500;
System.Windows.Forms.Application.DoEvents();
this.CRMTaskPaneControl.Control.Focus();
this.CRMTaskPane.Visible = true;
}
public partial class MyWinFormUserControl : UserControl
{
public WebBrowser webBrowser3;
public System.Windows.Forms.WebBrowser webBrowser1;
public MyWinFormUserControl()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.webBrowser3 = new System.Windows.Forms.WebBrowser();
this.SuspendLayout();
//
// webBrowser3
//
this.webBrowser3.Dock = System.Windows.Forms.DockStyle.Fill;
this.webBrowser3.Location = new System.Drawing.Point(0, 0);
this.webBrowser3.MinimumSize = new System.Drawing.Size(20, 20);
this.webBrowser3.Name = "webBrowser3";
this.webBrowser3.Size = new System.Drawing.Size(500, 749);
this.webBrowser3.TabIndex = 0;
this.webBrowser3.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser3_DocumentCompleted);
//
// MyWinFormUserControl
//
this.Controls.Add(this.webBrowser3);
this.Name = "MyWinFormUserControl";
this.Size = new System.Drawing.Size(500, 749);
this.Load += new System.EventHandler(this.MyWinFormUserControl_Load);
this.ResumeLayout(false);
}
void webBrowser3_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument doc;
doc = webBrowser3.Document;
doc.Click += doc_Click;
}
void doc_Click(object sender, HtmlElementEventArgs e)
{
this.Focus(); // force user control to have the focus
HtmlElement elem = webBrowser3.Document.GetElementFromPoint(e.ClientMousePosition);
elem.Focus(); // then let the clicked control to have focus
}
private void MyWinFormUserControl_Load(object sender, EventArgs e)
{
//Control loaded
}