如何在NPAPI中获取iframe html文档

发布于 2024-11-14 09:34:41 字数 462 浏览 5 评论 0原文

我正在尝试获取框架内的文档。

以下不会失败:

NPN_GetProperty(aInstance, windowObject, NPN_GetStringIdentifier("frames"), &frames)) 

但以下会失败,返回空元素:

NPN_Invoke(aInstance, NPVARIANT_TO_OBJECT(frames), NPN_GetStringIdentifier("item"), &index, 1, &currentFrame) 

我还尝试检索带有标签 IFRAME 的所有元素,但访问 contentWindowcontentDocument 属性返回一个 void 元素。

还有其他方法吗?

I am trying to obtain the document inside a frame.

The following does not fail:

NPN_GetProperty(aInstance, windowObject, NPN_GetStringIdentifier("frames"), &frames)) 

but the following fails, returning a null element:

NPN_Invoke(aInstance, NPVARIANT_TO_OBJECT(frames), NPN_GetStringIdentifier("item"), &index, 1, ¤tFrame) 

I've also tried to retrieve all elements with tag IFRAME, but accessing contentWindow or contentDocument property returns a void element.

Are there any other approaches to this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏夜暖风 2024-11-21 09:34:41

最后,我弄清楚了为什么 contentWindow 返回一个 void 元素。
以下是获取 iframe 文档的代码:

STRINGZ_TO_NPVARIANT("IFRAME", searchString); 
NPN_Invoke(instanceNPP,NPVARIANT_TO_OBJECT(document), NPN_GetStringIdentifier("getElementsByTagName"), &searchString, 1, &frameCollection);
            
if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(frameCollection), NPN_GetStringIdentifier("length"), &lenght))
{
    return;
}

for (int i=0; i<NPVARIANT_TO_INT32(lenght); i++)
{
    INT32_TO_NPVARIANT(i, index);
    if (!NPN_Invoke(instanceNPP, NPVARIANT_TO_OBJECT(frameCollection), NPN_GetStringIdentifier("item"), &index, 1, &frameItem))
    {
        continue;
    }
    if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(frameItem), NPN_GetStringIdentifier("contentWindow"), &contentWindow))
    {
        continue;
    }
    if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(contentWindow), NPN_GetStringIdentifier("document"), &frameDocument))
    {
        continue;
    }
    //do something with the frame's document
}

Finally, I've figured out why contentWindow was returning a void element.
Here's the code for obtaining an iframe document :

STRINGZ_TO_NPVARIANT("IFRAME", searchString); 
NPN_Invoke(instanceNPP,NPVARIANT_TO_OBJECT(document), NPN_GetStringIdentifier("getElementsByTagName"), &searchString, 1, &frameCollection);
            
if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(frameCollection), NPN_GetStringIdentifier("length"), &lenght))
{
    return;
}

for (int i=0; i<NPVARIANT_TO_INT32(lenght); i++)
{
    INT32_TO_NPVARIANT(i, index);
    if (!NPN_Invoke(instanceNPP, NPVARIANT_TO_OBJECT(frameCollection), NPN_GetStringIdentifier("item"), &index, 1, &frameItem))
    {
        continue;
    }
    if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(frameItem), NPN_GetStringIdentifier("contentWindow"), &contentWindow))
    {
        continue;
    }
    if (!NPN_GetProperty(instanceNPP, NPVARIANT_TO_OBJECT(contentWindow), NPN_GetStringIdentifier("document"), &frameDocument))
    {
        continue;
    }
    //do something with the frame's document
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文