{"record":{"id":"9fb3175fd939bcd7","repo":"cefsharp/CefSharp","slug":"gettype-name-membername-can-no-longer-be-mod","errorCode":null,"errorMessage":"{GetType().Name}.{memberName} can no longer be modified, settings must be changed before the underlying browser has been created.","messagePattern":"(.+?)\\.(.+?) can no longer be modified, settings must be changed before the underlying browser has been created\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"CefSharp/Internals/FreezableBase.cs","lineNumber":25,"sourceCode":"namespace CefSharp.Internals\n{\n    /// <summary>\n    /// Base classes for Feezable settings objects\n    /// </summary>\n    public class FreezableBase\n    {\n        private bool frozen;\n\n        public void Freeze()\n        {\n            frozen = true;\n        }\n\n        protected void ThrowIfFrozen([System.Runtime.CompilerServices.CallerMemberName] string memberName = \"\")\n        {\n            if (frozen)\n            {\n                throw new Exception(GetType().Name + \".\" + memberName + \" can no longer be modified, settings must be changed before the underlying browser has been created.\");\n            }\n        }\n    }\n}\n","sourceCodeStart":7,"sourceCodeEnd":30,"githubUrl":"https://github.com/cefsharp/CefSharp/blob/16bc6e0711a4945be17e8bc4bc7ccf9469f3fdec/CefSharp/Internals/FreezableBase.cs#L7-L30","documentation":"Thrown by FreezableBase.ThrowIfFrozen when a property/method of a freezable settings object (e.g. JavascriptBindingSettings, or JavascriptObjectRepository) is modified after Freeze() was called. CefSharp freezes settings once the underlying browser/context is created so that configuration cannot change mid-lifecycle; the message identifies the offending type.member (via CallerMemberName). The exception uses a base Exception with a composite message.","triggerScenarios":"Setting a property (e.g. JavascriptBindingApiEnabled, AlwaysInterceptAsynchronously) on JavascriptBindingSettings after it was frozen, or calling JavascriptObjectRepository.Register through a path that re-triggers a frozen setter. Freeze() is invoked when the browser/repository is bound/initialized.","commonSituations":"Changing JS binding settings at runtime after the browser is created; reconfiguring a repository that already had an object registered (Register calls Freeze internally); late initialization that touches settings after Cef.Initialize or browser creation; sharing a settings instance across browsers and mutating it for the second one.","solutions":["Configure all FreezableBase settings before creating the browser/repository that consumes them.","Do not mutate JavascriptBindingSettings properties after the browser is created; create a new settings instance for a new browser.","Register all JS objects up front, since JavascriptObjectRepository.Register freezes the repository.","If you must change config, recreate the browser/repository with new settings rather than mutating a frozen one."],"exampleFix":"// before (mutates after browser creation)\nvar settings = new JavascriptBindingSettings();\nvar browser = new ChromiumWebBrowser(url);\n// ... later ...\nsettings.JavascriptBindingApiEnabled = false; // throws\n\n// after (configure first)\nvar settings = new JavascriptBindingSettings { JavascriptBindingApiEnabled = false };\nvar browser = new ChromiumWebBrowser(url);","handlingStrategy":"validation","validationCode":"// FreezableBase has no public IsFrozen; track in your own lifecycle:\nif (!browserCreated)\n{\n    settings.AlwaysInterceptAsynchronously = true;\n}","typeGuard":null,"tryCatchPattern":"try\n{\n    settings.JavascriptBindingApiEnabled = value;\n}\ncatch (Exception ex) when (ex.Message.Contains(\"can no longer be modified\"))\n{\n    // Settings were frozen at browser creation; recreate the browser with new settings instead.\n}","preventionTips":["Configure all FreezableBase settings before creating the browser/repository.","Register JS objects up front (Register calls Freeze internally).","Never share and then mutate a settings instance across browsers; create a new one per browser."],"tags":["lifecycle","configuration","immutable","settings","cefsharp"],"backgroundTag":null,"analyzedSha":"16bc6e0711a4945be17e8bc4bc7ccf9469f3fdec","analyzedAt":"2026-08-13T19:57:05.828Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}