【问题标题】:iframe css src change, if parent css src changesiframe css src 改变,如果父 css src 改变
【发布时间】:2013-11-20 21:26:23
【问题描述】:

我正在做一个随机的学校项目。

目前,我有一个包含两个 CSS 的页面。一种用于正常视图,一种用于残障视图。

<link rel="stylesheet" type="text/css" href="css/main.css" title="main" media="screen">
<link rel="stylesheet" type="text/css" href="css/gyengen.css" title="alt" media="screen">

此页面还包括两个按钮,它们将更改使用的样式表。

function changeStyle(main) {
var lnks = document.getElementsByTagName('link');
for (var i = lnks.length - 1; i >= 0; i--) {
if (lnks[i].getAttribute('rel').indexOf('style')> -1 && lnks[i].getAttribute('title')) {
lnks[i].disabled = true;
if (lnks[i].getAttribute('title') == main) lnks[i].disabled = false;
}}} 

<div class="gyengen">
<span onclick="changeStyle('main')" class="normal"><img src="css/pictures/inverse.png" alt="Normál stíluslap"></span>
<span onclick="changeStyle('alt')" class="inverse"><img src="css/pictures/inverse.png" alt="Inverz stíluslap"></span>
</div>

我在页面上有一个图像映射,如果点击特定位置,它会链接到 iframe 目标。

<area shape="poly" coords="329,130,342,57,389,45,441,58,481,86,514,148,481,173,453,166,443,199,409,222,370,283,337,278,332,225,331,140" href="zones/gorgrond.html" alt="Gorgrond" title="Gorgrond" target="zone">

<iframe name="zone" onload='javascript:resizeIframe(this);'></iframe>

两个网站都在同一个域中。 我想实现的是,如果我用上面提到的方法更改父窗口的样式表,我也想更改 iframe 的 CSS 源。链接到 iframe 的网站与父窗口具有相同的 html 标签。

编辑:不幸的是,我只能使用 HTML5、XHTML Strict、jQuery/java

【问题讨论】:

  • 随机学校上什么样的学生?

标签: javascript jquery html css iframe


【解决方案1】:

这是解决此问题的一种方法。

您可以将 iframe 网站 CSS 源存储为 $_GET 变量。例如,假设您有两个文件:

  • index.php: 主页
  • iframe.php:要在 iframe 中显示的页面

现在,当您更改主页的样式表index.php 时,您还可以调用 JavaScript 函数来更改 iframe 的来源。例如,这是您的原始 iframe,带有样式表 1:

<iframe id="iframe" src="iframe.php?stylesheet=1"></iframe>

然后,在您的changeStyle 函数中,您可以使用getElementById 更改iframe 中页面的来源,如下所示:

document.getElementById("iframe").src = "iframe.php?stylesheet=2";

从这里,您可以在 iframe.php 的服务器端使用 PHP 处理要使用的样式表:

$stylesheet = $_GET["stylesheet"];
if($stylesheet == 1) {
     echo '<link rel="stylesheet" type="text/css" href="stylesheet1.css" title="main" media="screen">';
elseif($stylesheet == 2) {
     echo '<link rel="stylesheet" type="text/css" href="stylesheet2.css" title="main" media="screen">';
}

我还没有测试过这段代码,但理论上它应该可以正常工作。当然,我敢肯定还有很多其他方法可以解决这个问题,仅受您的聪明才智的限制。这是一种方法。如果您遇到任何问题,请告诉我。

更新

解决此问题的第二种方法(按照 OP 的要求,不使用 PHP)是类似的,但您可以使用 JavaScript 而不是 PHP 来处理 URL。看看window.location.search。它会返回一个这样的字符串:

?foo=1&bar=2

然后您可以使用 JavaScript 将其分解,如下所示:

var parts = window.location.search.substr(1).split("&");
var $_GET = {};
for (var i = 0; i < parts.length; i++) {
    var temp = parts[i].split("=");
    $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
}

alert($_GET['foo']); // 1
alert($_GET.bar);    // 2

将此应用于我们的情况,您可以使用 JavaScript 更改样式表的来源&lt;link&gt;,如下所示:

HTML:

<link id="main_stylesheet" rel="stylesheet" type="text/css" href="" title="main" media="screen">

JavaScript:

if($_GET['stylesheet'] == "1") {
     document.getElementById('main_stylesheet').href = "stylesheet1.css";
}
else if($_GET['stylesheet'] == "2") {
     document.getElementById('main_stylesheet').href = "stylesheet2.css";
}

同样,此代码未经测试,但我希望您对理论很清楚。第二种方法的参考可以在这里找到:Access GET directly from JavaScript?

【讨论】:

  • 我忘了说,可惜我们只能使用HTML5、XHTML Strict、jQuery/java。
  • 你的意思是 jQuery/JavaScript 吗? JavaScript 和 Java 是两种截然不同的语言。 “Java 之于 JavaScript,就像 Car 之于 Carpet。”
  • 是的,我指的是 JavaScript。
  • 我了解方法:在 iframe 中插入一个 javascript,它存储当前启用的父框架 CSS 的名称/ID。如果此变量是“main”,则启用 iframe 的“main” CSS。否则,如果父框架启用的 css id/name 为“alt”,则启用名为“alt”的 iframe 的 CSS。此外,当加载 iframe html 时,应该运行此 javascript。虽然 - 不幸的是 - 我还没有运气来练习 javascript,所以我知道如何编写这个代码需要一些帮助。 @goddfree 可以为我做这件事吗?
  • 我已经在帖子中为您提供了代码的所有关键组件。你有什么不清楚的地方?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2021-11-25
相关资源
最近更新 更多