更新アプローチ:ノードを複製するだけです。
// Proceed when the document has loaded
var timer = setInterval(function() {
// The document has loaded
if (document.readyState === "complete") {
// Stop checking document load-state
clearInterval(timer);
// Get our frame, and create a clone of it
var frame = document.getElementById("contentFR");
var clone = frame.cloneNode(true);
// Update the scrolling on the clone
clone.setAttribute("scrolling", "no");
// Replace original frame with clone frame
frame.parentElement.replaceChild(clone, frame);
}
}, 10);
このルートが選択された理由については、以下を参照してください。
プロパティや属性を変更しても機能しないとうんざりです。確かに、私はWindows 10上のInternet Explorer 11からしかチェックできないので、Internet Explorerの以前のビルドで同じ問題が再現されることはわかりません。あなたのユーザーはInternet Explorer 11に入っていると言われているので、問題が発生した場合でもそうなるでしょう。
私はまた、フレームセットの下<script>
を配置することはどちらか動作しないことがわかったので、私は<head>
に配置する(スクリプトのみ<body>
または<head>
内に配置することができていたが、この中に何<body>
がないので書類は、<head>
にしか置くことができません)。頭部は最初に解析/作成されるので、私たちのフレーム要素は頭からそれを変更する時間内には存在しません。また、IE 5のドキュメントモードを使用しているため、document
のDOMContentLoadedイベントでは再生できません。代わりに、がとして登録されるまで、document.readyState
の値を10msごとにチェックしました。
最後に、あなたが見つけたように、属性を更新するだけでは機能しないようです。プロパティの設定も機能していません。奇妙なことに、操作を実行した後で要素を検査すると、これらの両方が実際に値からからに変更されますが、変更はドキュメントに反映されません。このため、新しいフレームを作り直すことにしました。
このコードは本当に間違っていると感じています。誰かが一緒に来て、基本的に要素を複製し、一方の属性を他方の要素に適用するという極端な方法を必要としないアプローチを共有することを望みます。それまでは、この解決法が有効です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=5">
<script type="text/javascript">
// Proceed when the document has loaded
var timer = setInterval(function() {
if (document.readyState === "complete") {
// Stop checking document load-state
clearInterval(timer);
// Get our frame, and create a replacement
var frame = document.getElementById("contentFR");
var newFrame = document.createElement("frame");
// Copy all attributes over
var i = 0, attr;
for (; i < frame.attributes.length; i++) {
attr = frame.attributes[i];
// If we found a scrolling attribute, set it to 'no'
if (attr.name === "scrolling") attr.value = "no";
// Apply old attribute to new frame
newFrame.setAttribute(attr.name, attr.value);
}
// Replace old frame with new frame
frame.parentElement.replaceChild(newFrame, frame);
// Null-out our variables
frame = i = attr = timer = null;
}
}, 10);
</script>
</head>
<frameset cols="50%, *">
<frame src="side.html">
<frame src="page.html" id="contentFR" scrolling="Auto" noresize marginWidth="0" marginHeight="0">
</frameset>
</html>
上記のコードに誤字がありますか。 getElementById'と '(')の間には空白を入れてはいけません。また、あなたは期待していないことをしています;属性は変更されませんか? 'iFrm.getAttribute(" scrolling ")' – Sampson
申し訳ありませんが、私のコードではスペースがありません – fabolous
"私のアプリケーションはIE 5互換モードでのみ動作します"と言われると、それはあなたの*ターゲット*ドキュメントモード、今のところ唯一のものですか?現代版のIEや古いバージョンでこれを動作させたいのですか? – Sampson