javascript - 无法访问我的 iframe 内的跨域父元素

发布于 2024-08-02 13:44:37 字数 2146 浏览 3 评论 0原文

以下是我的问题的描述:

我已向我的网站添加了书签功能。为此,我在我的网站中提供了一个名为“我的书签”的链接。因此,我将该链接拖动到书签,它将添加到书签。因此,从现在开始,当我访问其他网站时,例如“yahoo.com”..并且我喜欢该网站的任何内容,因此我可以选择该内容并从书签中单击“我的书签”,它将打开我的一页站点作为“yahoo.com”的子元素。

为此,我在 javascript 中添加了以下代码。其中 ifrme src 是我网站的 url。

 var div = document.createElement("div");

  div.id = "instacalc_bookmarklet";

  var str = "";
  str += "<table id='instacalc_bookmarklet_table' valign='top' width='570' cellspacing='0' cellpadding='0'><tr><td width ='850' height='880'>";
  str += "<iframe frameborder='2' scrolling='yes' name='instacalc_bookmarklet_iframe' id='instacalc_bookmarklet_iframe' src='" + iframe_url + "' width='850px' height='875px' style='textalign:right; backgroundColor: white;'></iframe>";
  str += "</td><td id='closetd' onClick='toggleItem(\"instacalc_bookmarklet\");' style='background: #FFDDDD;' title='click to close window' valign='top' align='center' width='20px'>";
  str += "<a href='javascript:void(0);' style='width:100%; text-align: middle; color: #FF0000; font-family: Arial;'>x</a>";
  str += "</td></tr></table>";

  div.innerHTML = str;

  div.onkeypress = keyPressHandler;
  document.body.insertBefore(div, document.body.firstChild);

你可以在这里标记,我添加了一个表标签,并在其中添加了两个 td。一个 td 用于在 iframe 中显示我的页面,另一个 td 用于“关闭”按钮。这将关闭从“yahoo.com”打开的窗口。

现在,我的问题是..我的网站中有“关闭”按钮..单击它...我想关闭窗口..(与上面javascript中的“关闭”按钮执行的操作相同..调用“toggleItem” “功能)

但我的问题是..在我的iframe中我无法访问div元素..

我已经写了类似的内容

<a href="#bookmarklet" onclick="closethis();">Close</a>


<script>

    function closethis()
    {

      id='instacalc_bookmarklet';
      var item = parent.document.getElementById(id);
      if(item){
        if ( item.style.display == "none"){
          item.style.display = "";
        }
        else{
          item.style.display = "none";
        } 
      }
    }


</script>

,但是onclick了该关闭链接..我收到javascript错误“permission returned to get property window.document”行 var item =parent.document.getElementById(id);

有什么想法吗?

提前致谢。

Below is description of my que:

I have added bookmarklet feature to my site. For this, I have provided one link called "my bookmark" in my site.. So, I will drag that link to bookmark and it will be added to bookmark. So, from now, when I m visiting other site say "yahoo.com" .. and I like any content of that site so I can select that content and click on "my bookmark" from bookmark, it will open one page of my site as child element of "yahoo.com".

For that, I have added below code in javascript. where ifrme src is my site's url.

 var div = document.createElement("div");

  div.id = "instacalc_bookmarklet";

  var str = "";
  str += "<table id='instacalc_bookmarklet_table' valign='top' width='570' cellspacing='0' cellpadding='0'><tr><td width ='850' height='880'>";
  str += "<iframe frameborder='2' scrolling='yes' name='instacalc_bookmarklet_iframe' id='instacalc_bookmarklet_iframe' src='" + iframe_url + "' width='850px' height='875px' style='textalign:right; backgroundColor: white;'></iframe>";
  str += "</td><td id='closetd' onClick='toggleItem(\"instacalc_bookmarklet\");' style='background: #FFDDDD;' title='click to close window' valign='top' align='center' width='20px'>";
  str += "<a href='javascript:void(0);' style='width:100%; text-align: middle; color: #FF0000; font-family: Arial;'>x</a>";
  str += "</td></tr></table>";

  div.innerHTML = str;

  div.onkeypress = keyPressHandler;
  document.body.insertBefore(div, document.body.firstChild);

You can mark that here, I have added one table tag, and two td inside that.. One td to show my page in iframe and another td for "close" button.. which will close this opened windown from "yahoo.com".

Now, my question is.. I have button "close" in my site.. onclick of it... I want to close the window.. (the same action which 'close' button in above javascript does.. call "toggleItem" function)

But my problem is.. in my iframe I am not able to access the div element..

I have written like

<a href="#bookmarklet" onclick="closethis();">Close</a>


<script>

    function closethis()
    {

      id='instacalc_bookmarklet';
      var item = parent.document.getElementById(id);
      if(item){
        if ( item.style.display == "none"){
          item.style.display = "";
        }
        else{
          item.style.display = "none";
        } 
      }
    }


</script>

but onclick of that close link.. I get javascript error "permission denied to get property window.document" on line var item = parent.document.getElementById(id);

Any Ideas?

Thanks in Advance.

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

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

发布评论

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

评论(1

空城旧梦 2024-08-09 13:44:37

出于安全原因,这是 javascript 禁止的,并且您无法更改它。有一些绕过限制的方法:

  • 使用回调函数并将数据加载为 JSONP。这可能不适合您的情况。
  • 在网页中创建一个表单,并执行针对前域的操作,提交该表单,获取响应,然后删除该表单。

This is forbidden by javascript for security reason and you cannot change it. They are some ways to bypass the restriction :

  • Use a callback function and load the data as JSONP. This may not suit your case.
  • Create a form in the web page with an action aiming the foreight domain, submit it, get the response then delete the form.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文