Question

La documentation du DocumentComplete événement mentionne à la fin:

Dans le processus de chargement, le plus haut cadre de niveau, ce qui est pas nécessairement la trame de niveau supérieur, sans donner la finale DWebBrowserEvents2 :: DocumentComplete un événement. A cette époque, le pDisp paramètre est le même que le IDispatch pointeur d'interface du plus haut niveau cadre.

Quelle est la différence entre le plus haut cadre de niveau et le cadre de niveau supérieur, et comment puis-je obtenir une référence au cadre de niveau le plus élevé?

Était-ce utile?

La solution

Supposons que vous avez un site Web qui a un ensemble de cadres de niveau supérieur qui contient un cadre de bannière sur le dessus, un cadre de menu à gauche, et un cadre contenu à droite. Chaque élément d'ancrage dans le cadre de menu a un attribut cible défini sur le cadre de contenu. Il y a quelques iframes sur chaque page de contenu qui serait des pages cibles des éléments de menu.

Maintenant, vous cliquez sur un lien de menu à gauche. Le cadre lui-même fixé ne change pas, ni ne le cadre de menu. Le seul cadre qui naviguait est le cadre contenu, le cadre de plus haut niveau dans la navigation.

Vous pouvez obtenir la référence du cadre de navigation plus haut niveau du paramètre du premier événement NavigateComplete2. IE puis les analyser cadres sur la page de contenu pour voir s'il y a des cadres supplémentaires à charge. D'autres événements NavigateComplete2 et DocumentComplete2 ont été soulevées lorsque le reste des iframes sur la page de contenu sont chargés, et enfin l'événement DocumentComplete2 est soulevé pour la zone de contenu.

Autres conseils

si vous faites cela pour test pour voir si le document a chargé truely, il y a une meilleure façon de test pour cet événement particulier (ex: objets pDisp). Regardez quelques-unes de mes webbrowser-contrôle ses réponses.

ici, vous voulez lancer un compteur de différence entre NavComplete et DocComplete, cependant, si vous le faites normalement, il ne fonctionnera pas, comme NavComplete est appelé plus d'une fois sur de nombreux cadres, de sorte que vous devez vérifier si le NavComplete appelé est unique. Dans son vb simplement comparer un objet à un autre en utilisant l'opérateur est, en C # je comprends Is est pas disponible, vous faites juste une comparaison objet normal.

Alors, vous gardez une liste de tous les objets qui pDisp NavComplete a affiché, et avant d'ajouter chacun, vous vérifiez la collection pour vous assurer que le pDisp ajouté n'a pas été ajouté avant (ie: est unique), par exemple :. If pDisp Is pDispCollection(i) Then et « i » étant votre compteur incrément dans votre boucle pour chaque

, du pDisp que les messages DocComplete sont toujours uniques (si vous n'avez pas à vous soucier de s'appeler plus d'une fois pour chaque nouvelle / pDisp unique), de sorte que chaque fois qu'un pDisp se produit, vous trouverez juste que l'on est de la collecte et le supprimer.

Une fois que vous êtes à 0, vous savez qu'il a terminé truely:.)

Il y a d'autres choses dont vous avez besoin pour tester, mais cela est une grande / main importante et augmentera votre précision grand temps (beaucoup plus que juste pour vérifier .busy et .readystate).

Permettez-moi de savoir comment il va ou si vous avez besoin d'aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top