`
ayuayufan
  • 浏览: 29134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iframe跨域引用其他url造成拒绝访问的解决办法

阅读更多

有这样一段代码,需要在隐藏的iframe中调用其他的url:

function a(){
	var url=...;//跨域url
	var param=...;
	iframe3.document.location=encodeURI(url+param);
}
 

 

这个函数在同一页面上调用一次,没问题。再点一次呢?问题出现:JS提示拒绝访问。

如何能够避免这个问题呢,请看下面的代码。

function b(){
	var url=...;//跨域url
	var param=...;
	var ifr=document.createElement("iframe");//以下创建一个隐藏的iframe
	ifr.setAttribute("width",0);
	ifr.setAttribute("height",0);
	document.body.appendChild(ifr);
	ifr.src=encodeURI(url+param);
}
 

每次在新开的iframe中完成url所需的工作,这样就可以满足要求了。

 

注意,这样做适用于你的url仅做一些原子类的操作,如打印等。如果这个url具有连续性(比如要监听一个事件),建议你不要这样做,以免在同一个页面产生多个此类的操作。

分享到:
评论
1 楼 hzwr2008 2011-04-22  
你好!我是个新手,我想请教下一个问题,就是我现在也是遇到一个跨域的问题,但是我的iframe提交我用了httprequest.js的 httpIframeSubmit(form,callback,null)函数,url包含在form里,js里的代码如下, this.iframeSend = function(uri, formRef) {
   //alert(document.documentElement.innerHTML);
// Routes a request through our hidden IFRAME. Pass a URI, and optionally a
// reference to a submitting form. Requires proprietary 'readyState' property.
if (!document.readyState) return false;

// Opera fix: force the frame to render before setting it as a target.
if (document && document.getElementById && document.getElementById(this.iframeID))
  var o = document.getElementById(this.iframeID).offsetWidth;
// Either route the form submission to the IFRAME (easy!)...
 
if (formRef){
      formRef.setAttribute('target', this.iframeID);
      formRef.submit();
}else{
  // ...or load the provided URI in the IFRAME, checking for browser bugs:
  // 1) Safari only works well using 'document.location'.
  // 2) Opera needs the 'src' explicitly set!
  // 3) Konqueror 3.1 seems to think ifrDoc's location = window.location, so watch that too.
  var ifrDoc = this.iframe.contentDocument || this.iframe.document;
  if (!window.opera && ifrDoc.location &&
   ifrDoc.location.href != location.href) ifrDoc.location.replace(uri);
  else this.iframe.src = uri;
}

// Either way, set the loading flag and start the readyState checking loop.
// Opera likes a longer initial timeout with multiple frames running...
var reqobject = this;
this.loadingURI = uri;
setTimeout(iframeCheck,(window.opera ? 250 : 100)); 
function iframeCheck() {
// Called after a timeout, periodically calls itself until the load is complete.
// Get a reference to the loaded document, using either W3 contentDocument or IE's DOM.
//doc = reqobject.iframe.contentDocument || reqobject.iframe.document;
doc = reqobject.iframe.contentDocument || window.frames[reqobject.iframe.name].document;

// Check the IFRAME's .readyState property and callback() if load complete.
// IE4 only seems to advance to 'interactive' so let it proceed from there.
var il = reqobject.iframe.location, dr = doc.readyState;

if ((il && il.href ? il.href.match(this.loadingURI) : 1) &&
(dr == 'complete' || (!document.getElementById && dr == 'interactive'))){

     if (reqobject.callback) reqobject.callback(doc,this.loadingURI);
     this.loadingURI ='';
}
else setTimeout(iframeCheck , 50);
}

return true;
}
,我该如何修改啊?

相关推荐

    完美解决iframe跨域问题

    但这种方法需要服务器端的配合,对于纯客户端的iframe跨域解决方案不适用。 **三、window.name跨域通信详解** 1. **原理**:`window.name`不受同源策略限制,可以在任何页面中读写,即使页面被刷新或导航至其他URL...

    iframe 跨域解决方法

    解决`iframe`跨域问题有多种方法: 1. **使用`CORS`(跨源资源共享)**:服务器可以通过设置响应头`Access-Control-Allow-Origin`来允许特定的源访问其资源。例如,`Access-Control-Allow-Origin: *`表示允许所有源...

    iframe 跨域访问session

    `iframe` 跨域访问`session`正是为了解决这一问题。 首先,让我们了解一下`session`和`cookie`的关系。`session`通常用于存储用户登录状态等临时信息,而`cookie`则作为`session` ID的载体在客户端和服务器之间传递...

    解决JS跨域访问IFrame的解决方案

    "解决JS跨域访问IFrame的解决方案"这一主题关注的就是如何克服这个限制,使得在JSP页面中嵌入的跨域IFrame能够正常通信。下面我们将详细探讨这个问题以及可能的解决方案。 首先,理解同源策略是关键。同源策略是...

    关于iframe跨域POST提交的方法示例

    以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...

    iframe跨域通信解决方法

    ### iframe跨域通信解决方法 在现代Web开发中,跨域问题经常出现并困扰着开发者。尤其是在使用`iframe`嵌入不同源的内容时,主页面往往无法直接与`iframe`内的内容进行交互,这就需要一种解决方案来实现跨文档消息...

    iframe跨域访问示例

    为了解决iframe跨域访问的问题,Web开发中引入了几种解决方案: 1. **CORS(Cross-Origin Resource Sharing)**:这是一种服务器端的方法,允许特定的资源被其他域的页面访问。通过设置HTTP响应头`Access-Control-...

    iframe跨域常用问题和iframe页面自适应

    在网页开发中,`iframe`...总结,理解和掌握`iframe`的跨域解决方案以及自适应策略,对于开发高效且用户体验良好的Web应用至关重要。在实际应用中,还需要注意安全性、性能优化等问题,以提供更优质的网页服务。

    iframe跨域解决方案

    本篇将深入探讨如何解决`iframe`跨域问题。 首先,我们需要了解`iframe`的基本概念。`iframe`全称 Inline Frame,即内联框架,是一种在HTML文档中嵌入另一个HTML文档的方式,常用于加载外部内容,如广告、地图、...

    iframe跨域问题

    iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法

    iframe跨域访问时session丢失

    NULL 博文链接:https://thoreau.iteye.com/blog/745100

    iframe 跨域 自动适应高度

    在网页开发中,`iframe`(Inline Frame)是一种嵌入其他网页的标签,常用于实现页面内嵌或者组件化展示。然而,`iframe`在处理跨域内容时,会受到同源策略的限制,导致一些功能无法正常使用,比如获取iframe内的DOM...

    iframe 跨域

    综上所述,解决`iframe`跨域问题需要对浏览器的同源策略有深入理解,并灵活运用JSONP、CORS、`document.domain`和`postMessage`等跨域通信方法。在实际项目中,应根据需求和安全考虑选择合适的方式。在给定的文件中...

    跨域引用资源技术

    跨域引用资源技术是Web开发中的一个重要概念,它涉及到浏览器的同源策略和资源的共享。同源策略是由浏览器强制实施的一种安全策略,确保JavaScript只能访问与当前页面同源(即相同协议、相同域名和相同端口)的网页...

    js跨域解决方案

    4. **IFrame跨域通信**:利用`window.postMessage`方法,可以在属于不同源的两个IFrame之间进行通信。这种方法适用于页面嵌套场景,但不适用于跨域API调用。 5. **WebSocket跨域**:WebSocket协议本身支持跨域,...

    解决ASP.NET AJAX在frame及iframe中跨域访问的问题

    1、为ScriptManager添加脚本引用,不从ScriptResource.axd中加载MicrosoftAjax.js脚本,而是直接加载 ~/ScriptLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js" /> 2、修改MicrosoftAjax....

    iframe跨域与session失效问题的解决办法

    何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的...

    iframe跨域调用父窗口js.zip

    要解决iframe跨域调用父页面js方法的问题,我们可以利用以下几种技术: 1. **HTML5的postMessage和message事件**:这是现代浏览器支持的一种跨域通信方式。在iframe中,我们可以使用`window.parent.postMessage...

Global site tag (gtag.js) - Google Analytics