Embedding Youtube Videos in webbrowser. Object doesn't support property or method

后端 未结 4 1493
予麋鹿
予麋鹿 2021-02-12 12:21

Youtube has recently stopped supporting videos embedded in the format www.youtube.com/v/{key}. So I was trying to convert the video from \"/v/\" to \"/embed/\". However when I t

4条回答
  •  忘了有多久
    2021-02-12 12:58

    WPF have a feature "Browser Emulation" to solve this type of issue.

    Add the below enumaration

    public enum BrowserEmulationVersion
    {
        Default = 0,
        Version7 = 7000,
        Version8 = 8000,
        Version8Standards = 8888,
        Version9 = 9000,
        Version9Standards = 9999,
        Version10 = 10000,
        Version10Standards = 10001,
        Version11 = 11000,
        Version11Edge = 11001
    }
    

    Create a new class "InternetExplorerBrowserEmulation" and add the below codes in it.

    public class InternetExplorerBrowserEmulation
    {
        private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer";
        private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
    
    
        public static int GetInternetExplorerMajorVersion()
        {
            int result;
    
            result = 0;
    
            try
            {
                RegistryKey key;
    
                key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey);
    
                if (key != null)
                {
                    object value;
    
                    value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null);
    
                    if (value != null)
                    {
                        string version;
                        int separator;
    
                        version = value.ToString();
                        separator = version.IndexOf('.');
                        if (separator != -1)
                        {
                            int.TryParse(version.Substring(0, separator), out result);
                        }
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }
    
            return result;
        }
    
        public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion)
        {
            bool result;
    
            result = false;
    
            try
            {
                RegistryKey key;
    
                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
    
                if (key != null)
                {
                    string programName;
    
                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
    
                    if (browserEmulationVersion != BrowserEmulationVersion.Default)
                    {
                        // if it's a valid value, update or create the value
                        key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
                    }
                    else
                    {
                        // otherwise, remove the existing value
                        key.DeleteValue(programName, false);
                    }
    
                    result = true;
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }
    
            return result;
        }
    
        public static bool SetBrowserEmulationVersion()
        {
            int ieVersion;
            BrowserEmulationVersion emulationCode;
    
            ieVersion = GetInternetExplorerMajorVersion();
    
            if (ieVersion >= 11)
            {
                emulationCode = BrowserEmulationVersion.Version11;
            }
            else
            {
                switch (ieVersion)
                {
                    case 10:
                        emulationCode = BrowserEmulationVersion.Version10;
                        break;
                    case 9:
                        emulationCode = BrowserEmulationVersion.Version9;
                        break;
                    case 8:
                        emulationCode = BrowserEmulationVersion.Version8;
                        break;
                    default:
                        emulationCode = BrowserEmulationVersion.Version7;
                        break;
                }
            }
    
            return SetBrowserEmulationVersion(emulationCode);
        }
    
        public static BrowserEmulationVersion GetBrowserEmulationVersion()
        {
            BrowserEmulationVersion result;
    
            result = BrowserEmulationVersion.Default;
    
            try
            {
                RegistryKey key;
    
                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
                if (key != null)
                {
                    string programName;
                    object value;
    
                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
                    value = key.GetValue(programName, null);
    
                    if (value != null)
                    {
                        result = (BrowserEmulationVersion)Convert.ToInt32(value);
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }
    
            return result;
        }
    
    
        public static bool IsBrowserEmulationSet()
        {
            return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default;
        }
    }
    

    Before setting URL, we need to add the below codes.

    if (!InternetExplorerBrowserEmulation.IsBrowserEmulationSet())
    {
      InternetExplorerBrowserEmulation.SetBrowserEmulationVersion();
    }
    

    This will run the you tube videos using the webbrowser control in WPF

提交回复
热议问题