アプリ版:「スタンプのみでお礼する」機能のリリースについて

a.htmには以下のようなJavaScriptが記載されています。

<a href="javascript:c_click(1)">test</a>

a.htmの中にはclick内の数字が1~50程度のリンクがあり、
数字に応じて異なるJavaScriptが実行されるページです。



b.htmからa.htmの上記の<a href="javascript:c_click(1)">test</a>が実行されるリンクを作ることは可能なのでしょうか。

たとえば、b.htmに以下のようなHTMLを記述することを想定しています。

<a href="a.htmのjavascript:c_click(1)">test</a>

A 回答 (4件)

要件が以下の通りとします。



1. b.htm のリンクを押す
2. 遷移先または子画面として a.htm が開く
3. b.htm から渡された引数をもとに、関数 c_click が実行される
4. これ以降で、両者のやり取りは無い

この場合なら、a.htm の URL に引数を付けて実行が一番簡単です。
ブラウザによるキャッシュが利くので、即応性を求めないならこれが一番でしょう。

/* --- b.htm --- */
<a href="a.htm?q=1">画面遷移で開く</a>
<a href="a.htm?q=1" name=nameA>新しいタブで開く</a>

/* --- a.htm --- */
<script>(function(){
var s = window.location.search;
if (s && s.length > 1) {
var ps = s.substr(1).split('&');
ps.forEach(function(p){
var kv = p.split('=');
if (kv[0] == 'q') c_click(unescape(kv[1])); // c_click('1') を実現
});
}
})();</script>

もし開いた後でもやり取りがしたい場合は、ポップアップ形式の window.open なら可能ですが、最近の潮流ではセキュリティー観点から面倒なことになるのでお勧めしません。
    • good
    • 0

<a href="javascript:open('a.html').onload=function(){c_click(1)}"

t;/a>
    • good
    • 1
この回答へのお礼

ありがとうございます!
イメージ的には私が希望するそのものでしたが、上記のリンクを設定してクリックしても動作することができませんでした。

お礼日時:2013/05/19 22:40

c_click は a.htm の要素を操作する関数であり、外部スクリプト等では解決できない仮定で回答します。



ページをまたぐ関数呼び出しは、セキュリティーの観点から出来ないのですが、親子関係にあるページなら以下の方法で呼び出せます。

/* --- a.html --- */
<!DOCTYPE html>
<script> function c_click(x){ alert(x) } </script>
<body>
<p><a href=b.html target=nameA>新しいタブで開く子画面</a>
<p><iframe src=b.html>内部に埋め込む子画面</iframe>
<p><button onclick="window.open('b.html','nameB')">ポップアップの子画面</button>

/* --- b.html --- */
<!DOCTYPE html>
<script>
function clickParent(x){
var p = window.opener || window.parent;
if (p && p['c_click']) p.c_click(x);
}
</script>
<a href="javascript:clickParent(2)">click parent</a>
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます!
サンプルまで記載いただいて助かります。

今回のプログラムは、常時b.htm側が開いていて、
b.htm側からa.htmをひらくことを想定しています。
(b.htmが親、a.htmが子)

ご提示頂いたサンプルだと親子関係が逆になると思いますが、
今回の課題を実現するためには、ご提示頂いた親子関係が必須になりますでしょうか。

お礼日時:2013/05/19 10:23

a.htmで動作しているjavascriptをjsファイルに置き換え、b.htm側でも外部ファイルとして読み込むことで、あなたが考えている動きを実現させることができます。



<head>
<title>b.htm</title>
<!-- ここです↓ -->
<script type="text/javascript" src="sample.js" charset="utf-8"></script>
</head>
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
また、私の説明が不十分で申し訳ございません。

a.htm にあるJavascriptは a.htm 内の要素を実行するものになっています。具体的には、a.htmにはgoogleMapが記述されていて、a.htmページ内のc_click(n)をクリックすることで、nに対応する場所がgooglemapの中央に表示されるものとなっています。

今回実現したいのは、b.htm内に、nに対応するリンクを羅列し、b.htmの特定リンクをクリックすると、a.htmが開いて、対応するGoogleMapが描かれることを想定しています。

お礼日時:2013/05/19 10:30

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