Как создать меню правой кнопки мыши в Webview для любого сайта?
В html есть событие oncontextmenu
, которое используется для обнаружения щелчка правой кнопкой мыши. И вы можете использовать WebView
InvokeScriptAsync
, чтобы внедрить обнаруженный метод в функцию eval, где находится на html-странице. И когда щелкнет правой кнопкой мыши, вы можете использовать window.external.notify
перезвонить.
Например
Создать контекстное меню для тега <a>
.
public MainPage()
{
this.InitializeComponent();
MyWebView.LoadCompleted += MyWebView_LoadCompleted;
}
private async void MyWebView_LoadCompleted(object sender, NavigationEventArgs e)
{
string functionString = @"var anchors = document.querySelectorAll('a');
for (var i = 0; i < anchors.length; i += 1) {
anchors[i].oncontextmenu = function (e) {
var e = e||window.event;
var oX = e.clientX;
var oY = e.clientY;
var href = this.getAttribute('href');
window.external.notify([oX.toString(), oY.toString(), href].toString());
};
}";
await MyWebView.InvokeScriptAsync("eval", new string[] { functionString });
}
private void MyWebView_ScriptNotify(object sender, NotifyEventArgs e)
{
var items = e.Value.Split(',');
MenuFlyout myFlyout = new MenuFlyout();
MenuFlyoutItem firstItem = new MenuFlyoutItem { Text = "Open new tab" };
myFlyout.Items.Add(firstItem);
myFlyout.ShowAt(sender as UIElement, new Point(System.Convert.ToDouble(items[0]) , System.Convert.ToDouble(items[1])));
}
Обратите внимание
Разрешено сайты указаны в разделе Content URI Package.appxmanifest и не могут содержать доменные символы подстановки и должны быть https.
И это пример кода , на который вы могли бы ссылаться.