getElementById sur l'élément à l'intérieur d'une iframe

Mon code fonctionne sur les éléments à l'extérieur d'un iframe. Comment devrais-je m'approche d'extraction des éléments dans un iframe à l'aide getElementById? Mon objectif final est d'écrire du texte à l'intérieur de la <body id="tinymce"><p>...</p></body> balises. Je ne suis pas à l'aide d'un contrôle webBrowser - c'est pour une instance externe de iexplore

Exemple de code HTML

getElementById sur l'élément à l'intérieur d'une iframe

Exemple De Code

foreach (InternetExplorer ie in new ShellWindowsClass())
{
    if (ie.LocationURL.ToString().IndexOf("intranet_site_url") != -1)
    {
        IWebBrowserApp wb = (IWebBrowserApp)ie;
        while (wb.Busy) { Thread.Sleep(100); }
        HTMLDocument document = ((HTMLDocument)wb.Document);

        //FETCH BY ID
        IHTMLElement element;
        HTMLInputElementClass hitem;

        element = document.getElementById("tinymce");
        hitem = (HTMLInputElementClass)element;
        hitem.value = first_name;

        //FETCH BY ID in IFRAME
        IHTMLFramesCollection2 hframes = document.frames;
        for (int i = 0; i < hframes.length; i++)
        {
            object ref_index = i;
            IHTMLWindow2 currentFrame = (IHTMLWindow2)hframes.item(ref ref_index);

            if (currentFrame != null)
            {
                MessageBox.Show(currentFrame.name);
                //what to do from here?
            }
            else
                MessageBox.Show("Null");
        }
    }
}

- mise à jour idée
Possibilité d'adapter mon idée ci-dessous?

if (currentFrame != null)
{
    MessageBox.Show(currentFrame.name);

    HTMLDocument document_sub = ((HTMLDocument)currentFrame.document);
    IHTMLElement element_sub;
    HTMLInputElementClass hitem_sub;

    element_sub = (document_sub.getElementById("tinymce"));
    hitem_sub = (HTMLInputElementClass)element_sub;
    try
    {
        hitem_sub.value = first_name;

        //the above will produce...
        //InvalidCastException: Unable to cast COM object of type 'mshtml.HTMLBodyCLass' to class type 'mshtml.HTMLInputElementClass'
    }
    catch { }
}
Est le sous-châssis dans une autre origine que le document parent? Si oui, vous ne pouvez simplement pas atteindre et saisir son objet document en raison de la façon dont le SameOriginPolicy de restriction a été mise en œuvre. Au lieu de cela vous devez saisir le sous-châssis à l'aide de son IOleContainer interface...
Non, même origine - c'est exactement comment il est indiqué ci-dessus dans l'exemple de code html. Je n'ai jamais vu TinyMCE présenté dans le balisage de cette façon et il ne fait pas de sens pour moi, mais j'ai de travailler avec elle.
il pourrait être plus facile d'injecter un peu de JavaScript pour obtenir l'élément DOM vous avez besoin, comme ceci (à l'origine de la ici). Vous devriez être capable de faire la même chose en C# à l'aide de dynamic.
peut-être cette réponse est utile pour vous : stackoverflow.com/q/35651305/3555828

OriginalL'auteur Patrick Alexson | 2013-08-27