下記は実現可能でしょうか?
また実現可能であれば具体的な例をお教えください。

A.html※Cボタンを保持している
B.html※D関数(javascript)を保持している

(1)A.htmlのCボタン押下で、B.htmlの持つD関数(javascript)の呼び出し
(2)A.htmlからB.htmlへの遷移もしくはポップアップ表示

以上、よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

> B.htmlに関しまして、Yahooのログインのようなイメージです。


> つまり、こちらからソースの改変等は一切できません。
なるほど。合点がいきました。

であれば、#1さんの紹介されている第二の方法。
フレーム内の関数コールで実現できると思います。

*iframe内の関数を呼び出す
(初めて書いたのでもっと上手い書き方があるかもしれませんが、動作確認済みです。)

------- A.html -------
<iframe id='B' style='display:none;' src='B.html'></iframe>
<script type='text/javascript'>
function init(){// contentWindow.func()
document.getElementById('B').contentWindow.D();
}
function init2(){// contentDocument内にあるscript要素のテキストノードをeval()
var script = document.getElementById('B').contentDocument.getElementsByTagName('script')[0].firstChild.nodeValue;
eval(script);
D();
}
if(typeof window.addEventListener == 'function'){
window.addEventListener('load', init, false);
} else if(typeof window.attachEvent == 'object'){
window.attachEvent('onload', init);
}
</script>
---------------------
------- B.html -------
<script type='text/javascript'>
function D(){
alert('This is B.html');
}
</script>
---------------------

eval() はおまけです。
同名関数を定義していた場合に上書きしてしまう問題があることと、
この書き方ならiframeに拘る必要がない(Ajaxならhtmlを汚さない)ので中途半端な気もしますが、参考までに。

これらの方法で B.html に submit(); されるどうかまでは検証していません。(A.htmlにsubmitしてしまうかも)
B.htmlに submit(); されたとしても、<iframe style='display:none;'> に C.htmlが読み込まれる問題があります。
なので、iframeがC.htmlになったら、A.html から C.html にリダイレクトさせる処理が必要だと思います。

そこまでするなら、AjaxでB.htmlのソースを拾ってきて、B.htmlの<form>をにA.htmlに再現する方がスマートかもしれませんが。
# 一応、JavaScriptのクロスドメイン制限はFlashを利用することで回避できます。
# http://firegoby.theta.ne.jp/archives/224
    • good
    • 0

#4の補足です。



> そこまでするなら、AjaxでB.htmlのソースを拾ってきて
iframeのHTMLでも拾えます。

document.body.appendChild(document.getElementById('B').contentDocument.getElementsByTagName('form')[0]);
    • good
    • 0
この回答へのお礼

返答が遅れ申し訳ありません。上記方法にて実現できました!
どうもありがとうございました。

お礼日時:2009/06/09 09:05

#2です。

#1の補足を読みました。

> 現状、行いたいのはA.htmlを開くことでB.htmlというログイン画面を表示しないでB.html以降の後段画面に進む。ということです。
つまり、こういうことでしょうか?

* 期待する動作
1. A.html から B.html に遷移
2. B.htmlのJavaScriptによる submit(); で C.html に遷移

------------
/* A.html */
location.href = 'B.html';// 遷移

------------
/* B.html */
// ページ読み込み終了後、D() を実行する
function D(){
document.forms[0].request.value ="XXXX";
document.forms[0].submit();
}
if(typeof window.addEventListener == 'function'){
window.addEventListener('load', D, false);
} else if(typeof window.attachEvent == 'object'){
window.attachEvent('onload', D);
}
------------

遷移でいいのならこれで希望通りな気はするのですが、
この場合、A.html は B.html へのリダイレクタとしての機能しか果たせないので、初めから B.html を開くようにリンクを貼っても機能してしまいます。
(window.openならまた少し話は違いますが)

何か別の要求仕様があるような気もするのですが…。

この回答への補足

すみません。また説明不足で申し訳ありません。
B.htmlに関しまして、Yahooのログインのようなイメージです。
つまり、こちらからソースの改変等は一切できません。
以上を勘案の上で、A.htmlからB.htmlの関数Dをコール出来るか否かというところが質問の真意となります。
#1さんの回答を見る限り無理そうな気がしますね。。。

補足日時:2009/05/25 16:46
    • good
    • 0

(1) は既に回答されているように外部JavaScriptを使うのがいいかな、と思います。


なので、(2)だけ。

> (2)A.htmlからB.htmlへの遷移もしくはポップアップ表示

// 遷移
location.href = 'B.html';

// ポップアップ
window.open('B.html','_blank');

これでどうでしょうか?(動作確認済み)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせていただきます。

お礼日時:2009/05/25 16:43

>(1)A.htmlのCボタン押下で、B.htmlの持つD関数(javascript)の呼び出し



B.htmlが呼ばれていないので、できません。
運用上jsは外部化してある場合が多いと思います。
であればB.htmlから呼び出しているjsがB.jsであれば、
A.htmlからB.jsをscriptタグで読み込んでしまえば関数を再利用
することは可能です。

また、場合によりますがフレーム系の処理をつかえば、参照する
ことは可能です。

>(2)A.htmlからB.htmlへの遷移もしくはポップアップ表示

これは普通にできません?
どこでつまっているかわからないのでなんとも言えませんが・・・

この回答への補足

説明が不十分で申し訳ありません。
現状、行いたいのはA.htmlを開くことでB.htmlというログイン画面を表示しないでB.html以降の後段画面に進む。ということです。
ですので、処理上の順番は(1)⇒(2)となります。

また、D関数の中身は以下のようになっており、

function D(){
document.forms[0].request.value ="XXXX";
document.forms[0].submit();
}

上記をA.htmlより呼び出し後、遷移もしくはポップアップを行いたいと思っています。
ですので、D関数を呼び出すかもしくは子画面に対して上記の値セット+サブミットが行えないかどうかが今回聞きたい内容となります。
ご存知でしたらお教えください。

補足日時:2009/05/25 13:05
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q画面間でのJavaScriptでの値の受け渡しについて

お世話になります。

画面(ASPで作成した画面)間でのJavaScript同士の値の受け渡しは出来るのでしょうか。

画面1から画面2を開き、画面2のJavaScriptの関数内で画面1のJavaScriptの値を変えると言った事は出来るのでしょうか。

何方かご存知でしたら、お教え下さい。
宜しくお願い致します。

Aベストアンサー

IEとFireFoxで試してみましたけど、できそうですね。
tes1.htmlからtes2.htmlを開いた場合のソースです。
関数はボタンとかから適当に呼んでください。

// tes1.htmlのJavaScript
var value=0;
function msg () {
alert(value);
}
function openWnd () {
wnd = window.open("tes2.html");
}

// tes2.htmlのJavaScript
function count () {
opener.value++; // openerが親元
alert(opener.value);
}

Q子→親ウインドウへデータを受け渡し、子ウィンドウを閉じる。

このような処理はできないでしょうか?

子ウィンドウはコード番号の検索用。該当のコードのリンクをクリックすると、そのコード番号を親ウィンドウのテキストボックスへ落とし込む。そのタイミングで、子ウィンドウは閉じる。
子→親ウインドウへのデータの受け渡しと、子ウィンドウのクローズを同時に行うようなイメージです。
よろしくお願いします。

Aベストアンサー

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<th>顧客名称</th>
</tr>
<tr>
<td><a href="javascript:ich('ABC商店')">0001</a></td>
<td>ABC商店</td>
</tr>
<tr>
<td><a href="javascript:ich('DEF商店')">0002</a></td>
<td>DEF商店</td>
</tr>
</table>

もしくはNo.1様の言うようにidを設定して
【親画面】
<input type="text" name="kokyaku_cd" size="10" id="kokyaku_cd">

【子画面 function内】
window.opener.document.getElementById("kokyaku_cd").value=n;

でできると思います

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<t...続きを読む

Qwindow.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するには

window.openで開いた子ウィンドウから親ウィンドウのjavascriptを実行するにはどうしたらよいのでしょうか。

子ウィンドウから
<INPUT TYPE="button" value=\"実行\" onClick=opener.document.jikkou();>

<INPUT TYPE="button" value=\"実行\" onClick=opener.jikkou();>
等のボタンを作ってみましたが、無反応でした。

すいません。宜しくお願いします。

Aベストアンサー

普通に実行できると思いますが・・・

//parent.htm
<script>
function jikkou(){
alert("ok");
}
</script>
<input type="button" value="open child" onclick="window.open('child.htm')">

//child.htm
<input type="button" value="jikkou" onclick="opener.jikkou()">

Q別ファイルのfunctionの読み込み方

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために私が最初に書いたhtmlの文です(もちろん実行できませんでした)
------------------------------------
<html>
<script language="javascript" src="hello.js">
aisatsu(){
document.write(aa);
}
</script></html>
------------------------------------

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために...続きを読む

Aベストアンサー

function内で「var」をつけて変数を宣言するとfunction外からその変数の内容を取得することができなくなります。(returnで参照することはできます。)
なので変数の内容を取得する場合は「hello.js」の内容を

function aisatsu(){
var aa="hello";
return aa;
}

このように修正し、

<script language="javascript" src="hello.js"></script>
<script language="javascript">
var data=aisatsu();//「aisatsu()」関数の「aa」変数内のデータを引っ張り出す(return aa;)
document.write(data);//書いたり
alert(data);//アラートしたり
window.status=data;//ステータスバーに表示したり・・
</script>

Q子ウィンドウの存在確認

子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。

function OpenSubWindow()
{
if(!w.closed()){
alert('閉じろ!');
}else{
w = window.open("a.html","sub","resizable=no,scrollbars=no");
}
}

この場合、当然のことですが、変数wはelseの中で初めて初期化されるため、ifの条件でオブジェクトが存在しないことによりエラーが発生します。

でも、"sub"というname属性のウィンドウが開いているかどうかを確認したいのですが、どうすればよいのでしょうか?wを初期化する方法が何かあるのでしょうか?それとも、subウィンドウのopen/closeの状態を管理するロジックを作りこまないといけないのでしょうか?

Aベストアンサー

細かなロジックを考える必要はありませんよ。
w がオブジェクトかどうか分からない時点で w.closed を評価するのがマズイだけですから、評価の順番を変えればいいんです。

var w;
function OpenSubWindow() {
  if (!w || w.closed)
    w = window.open("a.html", "sub", "resizable=no,scrollbars=no");
  else
    alert("閉じろ!");
}

ちなみに closed はメソッドではなくプロパティですので、w.closed() ではエラーとなります。
また、既に開いているときの処理は
  w.focus();
とすれば子ウィンドウがアクティブになるのでオススメです。

QHTMLファイル同士での値渡し

困っています。

HTMLファイルからHTMLファイルへ移動するときに、
HTMLファイル1でJavaScript で算出された値を
HTMLファイル2へ渡して使用したいのです。

showModalDialogだとダイアログにしか渡せないし・・・。
このように、値をそのまま次のページに渡すための方法を教えてください。
お願いします。

Aベストアンサー

すみません。うっかりしてました。

document.write(FORM[v1]);
では、v1を変数と認識してしまうので、エラーになってしまいますね。

document.write(FORM.v1);  // 「FORM.v1」です
あるいは
document.write(FORM["v1"]);
としてください。

Q親ウィンドウから子ウィンドウのテキストボックスに。。。

おはようございます。
困っています。

AというウィンドウにてJavaScriptから新しく開いたBという子ウィンドウにある document.myForm.textbox.value に任意も文字列「あああ」と表示させたいとするとどう書けばいいでしょうか?

フレームであれば、parent.headarea.~をつければいけますが・・・。

Bウィンドウは「win1」というウィンドウです。

BにJavaScriptを書くのではなく、開いたAに書きたいのですが。。。

宜しくお願い致します。

Aベストアンサー

こんにちは

親ウィンドウで

subwin = document.open("sub.html","win1","");

といった感じで、子ウィンドウを開いていますよね。

subwin.document.myFOrm.textbox.value = "あああ" ;

とかやれば、入力できると思いますが、如何ですか?

Qテーブル内の文字サイズを変更したい。

HTMLのテーブル内の文字サイズを変更したいのですが。
イマイチ上手くいかずに悩んでいます。
出来れば全体的に<TABLE></TABLE>のほうでいじれますか?
<TD>タグや<TR>タグのところでいじくるのですか?

Aベストアンサー

いろいろやり方はありますが
文字単位でサイズを変更するには
#2の方法ですね。

テーブルごとやセル(<TD>)ごとにサイズを変更するには
スタイルシート(CSS)を使用します。

テーブルごとにサイズを変更する場合
<TABLE style="font-size : 20px;">

セル(<TD>)ごとにサイズを変更する場合
<TD style="font-size : 20px;">あああ</TD>

#1の方法だとページ内の全てのセル(<TD>)に設定することになります。

スタイルシート(CSS)はこれら以外にも
いろいろな設定方法があります。

Q