Não é possível chamar o método de um objeto JavaScript criado no código injetado no Documento do WebBrowser após navegar

Encontrei outras perguntas como essa, mas não exatamente, e com soluções que não resolvem esse problema específico. Estou trabalhando em um projeto parecido com o iMacros para Internet Explorer. Este é o meu código simplificado:

public partial class Form1 : Form
{
    public JSObject jsObject = new JSObject();
    int uniqueNameEnsurer = 0;

    public Form1()
    {
        InitializeComponent();
        webBrowser1.Navigate("www.google.com");
    }

    private void InvokeCode(string functionCode)
    {
        HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
        HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
        IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
        element.text = "function MyInjectedFunction" + uniqueNameEnsurer + "(Param){" + functionCode + "}";
        head.AppendChild(scriptEl);
        webBrowser1.Document.InvokeScript("MyInjectedFunction" + uniqueNameEnsurer, new object[] { jsObject });
        uniqueNameEnsurer++;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        InvokeCode(@"
            function MyObject()
            {
                this.Something = 'hello';
                this.SomeFunc = function(){
                    alert('in SomeFunc!!!');
                }
            }

            Param.UserData = new MyObject();
        ");
    }

    private void button2_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate("www.bing.com");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        InvokeCode(@"
            alert(Param.UserData.Something);
            Param.UserData.SomeFunc();
        ");
    }
}

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class JSObject
{
    public object UserData;
}

Então, o que eu faço é clicar no botão1 (que chamabutton1_Click) e, em seguida, o botão2 (que chamabutton2_Click), aguarde um segundo para carregar e clique no botão3 (que chamabutton3_Click) Quando clico no botão3, recebo um alerta dizendo "olá" (que significa que o objeto persiste após a navegação), mas logo depois, recebo um erro dizendo "Não é possível executar o código de um script liberado". Provavelmente isso é algum tipo de coisa de segurança. Eu encontrei alguns posts falando, mas nenhum deles resolve meu problema. Eu posso fazer uma solução alternativa criando meuSomeFunc como uma string e, em seguida, usandoeval, mas esta é uma solução desagradável. Se houver algo que eu possa fazer no meu código C # que me permita manter o código JavaScript do jeito que está (e funcione, é claro), seria muito legal. Caso contrário, qual seria a melhor solução para que eu possa ligarSomeFunc depois de navegar?

questionAnswers(2)

yourAnswerToTheQuestion