2012-02-28 79 views
0

我是web开发和js的新手。我了解一些js和jQuery,但还不足以编写有用的代码,所以我希望在这里获得帮助。我将一些第三方网络应用程序通过iFrame(弹出窗口和直接链接,这是最好的方式)合并到我的网站中,并且有两个部分的问题。iframe js问题

1)网络应用程序不允许直接编码,只允许有限数量的CSS样式选项。我可以上传背景图片并更改背景颜色,但我无法使其透明。我想调整iframe,以便我的网站背景显示。根据Firebug的说法,我可以简单地将背景色选项全部取出,问题就解决了。

问题是这些应用程序位于不同的域导致跨域问题,我想大多数代码是服务器端使用动态视图控制器(在我的头上),因此将代码直接并入我的网站会可能不起作用。我的“IT专家”表示,我们应该能够在我的.php文件中定位iframe,并在加载iframe后更改样式,因为样式级联。但是,iframe以及页面上的其他所有内容都没有被命名(没有类或ids),所以为了定位它,我必须使用某种(“this”)。child.child(“body “) 之类的事情。到目前为止,我们没有尝试过任何方法。如果我可以定位iframe,则可以更改其他小问题,例如无法正确显示的按钮。

2)如果我设置了iframe的高度,并且iframe显示的东西比高度长,它会切断(显然)。我需要iframe具有动态高度,因此如果iframe的内容发生更改,iframe的高度也会发生变化。我已经看到了代码片段来做到这一点,但我不知道我在做什么,令人惊讶的是它没有奏效。如果这有效,我希望能够学习一点js魔法。

测试页面位于http://www.nightaliveent.com/builds/1.0/music.php。如果有帮助,我可以提供我目前的代码,但我不想污染董事会。作为参考,网络应用程序是DJ智能工具,具体来说(http://www.djintelligence.com/music)。

感谢您的帮助。每一点都有帮助,如果我无法实现这个目标,我将不得不停止使用网络工具。

回答

0

只有在相同域(安全性)上使用iframe中的内容时,才能尝试从另一个域访问它,这将无法工作。另外最好不要使用iframe(折旧),而是使用对象。对于某些IE版本,您需要一个iframe,因为IE不符合W3C标准(offtopic:在我看来,IE是一种垃圾)。

如果您想加载内容,您可以做些什么来自其他网站的部分是使用ajax,并在检索页面后筛选出您想要的内容。请参考jQuery.ajax函数,您可以定义成功和错误回调。例如:

$.ajax({ 
    async:true, 
    cache:true, 
    url: 'your url', 
    success:function(s) { alert('the string is: '+s); <filter contents and set target> }, 
    error:function() { alert('failed'); } 
}); 

希望它有帮助。

+0

这与我们通过'getContents ...'在.php中尝试并包含该文件类似。它工作,但页面的动态内容没有加载。此方法失败并且错误“XMLHttpRequest无法加载http://nightaliveent.djintelligence.com/music/index.asp。Origin http://nightaliveent.com不允许通过Access-Control-Allow-Origin。我想回显访问控制状态的失败函数,以便我可以看到它是否设置,我已经看到提及的JSON,并添加一个AJAX头没有工作。在我看来,它必须通过请求控制 – 2012-02-29 18:29:13

+0

它与file_get_contents()不相似,当你想使用服务器端时,最好使用curl扩展名。不相似的原因是这是服务器端,另一个是客户端。客户端也会发送一个'HTTP_X_REQUESTED_WITH'头部选项,而服务器端不会这样做,也许这个源头会被ajax调用,另一方面你必须为这个服务付费,而且你不能免费使用它,所以我认为你试图做的是非法的。询问他们是否有一个API来整合它你的网站,但我认为当他们有一个API它写ASP。 – Codebeat 2012-02-29 21:44:37

+0

另外,当我看到你的页面时,你想让用户相信它是你的服务。我认为这也是非法的。要求一个API或放弃并建立自己的东西。 – Codebeat 2012-02-29 21:48:40

0

“我的‘IT人’说,我们应该能够为目标的iframe在我的PHP文件,一旦在iframe装载改变风格,因为风格级联。”

有很多不妥那。

  • iframe加载后,它已经在浏览器中的客户端。 PHP没有发言权
  • 样式级联在当前DOM中。你的iFrame是一个完全不同的DOM的'洞'。您无法对来自其他域的iFrame中的内容进行样式设置。

“我需要的IFRAME有一个动态的高度,因此,如果iframe的变化,的IFRAME的高度变化以及内容”

我能想到一些疯狂的服务器端的黑客对可能计算,但是,唉,你可以做的也不多。

当您将其他网站加载到iFrame中时,您必须记住它们不是您的网站。这不是你的代码。出于希望显而易见的安全原因,浏览器不会让您直接操纵iFrame的内容。

0

凯尔,你是绝对正确的,你不能访问iframe的内容,如果父母和孩子的域名不同,在你的情况是这样的。父网址是“http://www.nightaliveent.com”,子域(第三方网络应用程序)是“http://www.nightaliveent.djintelligence.com/music”

如果您尝试访问页面加载后iframe内容抛出下面的异常。

$("iframe").contents() 

不安全JavaScript尝试与URL http://www.nightaliveent.djintelligence.com/music/从帧帧访问使用URL http://www.nightaliveent.com/builds/1.0/music.php。域,协议和端口必须匹配。