c # - UWP WebView Javascript 'Objekt understøtter ikke egenskab eller metode'

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for JavaScript i en UWP (Windows 10) WebView for at kalde en C # -metode. Jeg fulgte instruktionen om, hvordan man bruger AddWebAllowedObject, men når JavaScript kalder C # -funktionen, får jeg denne javascript-fejl:



  0x800a01b6 - JavaScript runtime fejl: Objekt understøtter ikke egenskab
  eller metode 'getAppVersion'



Som du ser i javascript, er 'window.SCObject' et gyldigt objekt, men 'window.SCObject.getAppVersion ()' kaster en fejl! Enhver ide hvorfor?


Her er min kode C # kode:


namespace Test
{
    [AllowForWeb]
    public sealed class HtmlCommunicator
    {
        public string getAppVersion()
        {
            PackageVersion version = Package.Current.Id.Version;
            return String.Format("{0}.{1}.{2}.{3}",
                                 version.Major, version.Minor, version.Build, version.Revision);
        }
    }


    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            this.HtmlWebView.Navigate(new Uri("ms-appx-web:///Assets/HTMLPage1.html"));
        }

        private HtmlCommunicator communicationWinRT = new HtmlCommunicator();
        private void HtmlWebView\_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
        {
            this.HtmlWebView.AddWebAllowedObject("SCObject", communicationWinRT);
        }
    }
}


Her er min XAML:


<Page
x:Class="Test.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Test"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <WebView NavigationStarting="HtmlWebView\_NavigationStarting" x:Name="HtmlWebView" />
</Grid>





Her er min Javascript:


<script type="text/javascript">
    function HtmlGetAppVersion() {
        if (window.SCObject) { //this is true
            var version = window.SCObject.getAppVersion(); //error occurs here
            console.log("Version: " + version);
        }
    }
</script>


Tak skal du have.

Bedste reference


Jeg så, at HtmlCommunicator blev defineret i samme projekt, det ville ikke fungere.


Du skal oprette et separat Windows-runtime-komponentprojekt.


MSDN-dokumentationen har også nævnt dette punkt: [4]



  Objektet, der blev overført til AddWebAllowedObject (System.String, System.Object), skal importeres fra en Windows Runtime-komponent, som er adskilt fra appenheden. Dette er nødvendigt for at AllowForWeb-attributten skal være ejendom identificeret af WebView-sikkerhedssystemet. Hvis du bruger en klasse fra dit app-projekt, fungerer AddWebAllowedObject (System.String, System.Object) ikke.



Jeg har hjulpet dig med at teste i en separat Windows runtime komponent. Det fungerede godt.