我使用此javascript代码成功将上下文菜单添加到我的webbrowser:
public void AttachContextMenu()
{
try
{
if ((App.Current as App).Browser.IsScriptEnabled)
{
(App.Current as App).Browser.InvokeScript("execScript", "function FindParentLink(item) \r\n{\r\n\tif (!item.parentNode)\r\n\t\treturn null;\r\n\tif (item.tagName.toLowerCase() == 'a') \r\n\t{\r\n\t\treturn item;\r\n\t} \r\n\telse \r\n\t{\r\n\t\treturn FindParentLink(item.parentNode);\r\n\t}\r\n}\r\n\r\nfunction FindParentImage(item) \r\n{\r\n\tif (!item.parentNode)\r\n\t\treturn null;\r\n\tif (item.tagName.toLowerCase() == 'img') \r\n\t{\r\n\t\treturn item;\r\n\t} \r\n\telse \r\n\t{\r\n\t\treturn FindParentImage(item.parentNode);\r\n\t}\r\n}\r\n\r\nfunction HandleContextMenu() \r\n{\r\n\tvar linkItem = FindParentLink(event.srcElement);\r\n var imageItem = FindParentImage(event.srcElement);\r\n var notifyOutput = '';\r\n if (linkItem != null) if (linkItem.href != null) notifyOutput += linkItem.href;\r\n if (imageItem != null) if (imageItem.src != null) notifyOutput += imageItem.src;\r\n if (notifyOutput != '')\r\n window.external.notify(notifyOutput);\r\n else\r\n\t\twindow.external.notify('NOTLINKIMG');\r\n}");
(App.Current as App).Browser.InvokeScript("execScript", "document.oncontextmenu = HandleContextMenu;");
}
}
catch
{
}
}
每次浏览器导航时都会使用此方法。 因此,scriptnotify代码将在用户持有链接时使用:
if (e.Value.ToString() != null && IsValidUri(e.Value.ToString()))
{
ContextMenu cm = new ContextMenu();
MenuItem menuItem0 = new MenuItem() { Header = "X", Tag = e.Value };
menuItem0.Click += new RoutedEventHandler(X_Click);
MenuItem menuItem1 = new MenuItem() { Header = "Y", Tag = e.Value };
menuItem1.Click += new RoutedEventHandler(Y_Click);
MenuItem menuItem2 = new MenuItem() { Header = "Z", Tag = e.Value };
menuItem2.Click += new RoutedEventHandler(Z_Click);
cm.Items.Add(menuItem0);
cm.Items.Add(menuItem1);
cm.Items.Add(menuItem2);
ContextMenuService.SetContextMenu(Browser, cm);
cm.IsZoomEnabled = false;
cm.VerticalOffset = mouseClickPosition.Y;
cm.IsOpen = true;
}
到目前为止,我希望我做的一切都是正确的。
现在,它随机起作用。近50%的尝试导致错误,Visual studio导航到名为“No source available”的蓝白框架并抛出NullReferenceException。
这应该在哪里解决?已经在孔2方法周围设置了一个try-catch块,没有变化:/
希望你有一些想法
招呼 roqstr
答案 0 :(得分:1)
没有工作,但有一个解决方法:
AttachContextMenu()
- >持有一个链接会将url推送到scriptnotify方法。
构建自定义上下文菜单&一切都很好。