Как сделать WebView редактируемым на winrt?

Мне нужно создать простой редактор HTML. Я знаю настольное приложение, я могу получить доступ к DOM и установить DesignMode=true. Как я могу сделать это для WebView в приложении winrt?


person mktn    schedule 19.03.2014    source источник


Ответы (1)


Похоже, я нашел решение, как установить DesignMode для WebView в приложениях WinRT.

Мне просто нужно было вызвать метод javascript, который мог бы изменить свойство document.designMode на «on»

В моем случае я реализовал расширение для WebView, где добавил DependencyProperty.

public static class WebViewEx
{
    public static readonly DependencyProperty DesignModeProperty = DependencyProperty.RegisterAttached(
                                                                               "DesignMode", typeof(bool),
                                                                               typeof(WebViewEx),
                                                                               new PropertyMetadata(null, OnDesignModePropertyChanged));

    private async static void OnDesignModePropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        if (DesignMode.DesignModeEnabled)
            return;

        WebView view = dependencyObject as WebView;
        if (view == null)
            return;

        if (e.NewValue == e.OldValue)
            return;

        await view.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
        {
            if ((bool)e.NewValue)
            {
                await view.InvokeScriptAsync("eval", new string[] { "document.designMode = \"on\";" });
            }
            else
            {
                await view.InvokeScriptAsync("eval", new string[] { "document.designMode = \"off\";" });
            }
        });
    }

    public static void SetDesignMode(DependencyObject element, bool value)
    {
        element.SetValue(DesignModeProperty, value);
    }
    public static bool GetDesignMode(DependencyObject element)
    {
        return (bool)element.GetValue(DesignModeProperty);
    }
}

Это позволяет мне включать\выключать DesignMode из XAML

<WebView x:Name="webViewBody" Source="about:blank" controls:WebViewEx.DesignMode="true"/>

Обязательным требованием для вызова методов javascript является инициализация веб-просмотра. В моем случае я установил для свойства источника значение «о: пусто».

person mktn    schedule 20.03.2014