XUL を用いて Firefox Extension を勉強しているのですが、どのようにすればオープンした window に外部から値を渡すことがでるのでしょうか?


-- window をオープンする myWindow.js ファイル --
function openNewWindow()
{
var myWin = window.open("chrome://sample/content/myWindow.xul","my window","chrome,width=480,height=640");
}
----

-- myWindow.xul --
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window
id="findfile-window"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<button id="myButton" label="my button" />

<script>
function setButtonLabel(str){
document.getElementById('myButton').setAttribute('label', str);
}

function showAlert(msg){
alert(msg);
}
</script>
</window>
----
myWindow.js で var myWin = window.open(...) の直後に
myWin.setButtonLabel("New Label");
myWin.showAlert("ALERT !");
等を行い myWindow.xul の window タグ内に定義されている関数に値を渡しても何も起こりませんでした。
尚、新しいwindowは myWindow.js により正常にオープンされています。
myWindow.xul 内の button コンポーネント (id = myButton ) の label の値を直接 myWindow.js から変更する方法があれば、そちらも教えて頂けますと大変助かります。
以上、何卒宜しくお願い申し上げます。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/08/23 18:08:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:sukiyaki22 No.1

回答回数299ベストアンサー獲得回数2

id:pooh2005

申し訳ないですが、回答になってません・・・。

2007/08/23 18:06:25
id:northapple No.2

回答回数85ベストアンサー獲得回数6

ポイント69pt

myWindow.js

var myWin = window.openDialog("chrome://sample/content/myWindow.xul", "my window", "chrome,width=480,height=640", {label: "hogehoge"});

openでなくopenDialogを使用して、渡したいデータを

{label: "hogehoge"}

のようにJavaScriptオブジェクトのかたちで記載して渡す。

myWindow.xul

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window onload="init();" 
id="findfile-window"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script><![CDATA[
function init() {
  var button = document.getElementById("myButton");
  var buttonLabel;
  if("arguments" in window &amp;&amp; window.arguments.length > 0) {
    buttonLabel = window.arguments[0].label;
    button.setAttribute('label', buttonLabel);
  }
}
]]></script>
<button id="myButton" label="my button" />
</window>

myWindow.xulでは、onloadされたときに実行される関数init()で、myWindow.jsで渡されたデータにwindow.argumentsプロパティでアクセスして<button>のラベルに設定する。

以上のようにするとスクリプト側からボタンのラベルを設定できると思います。はずしてたらごめんなさい。

参考サイト

http://developer.mozilla.org/ja/docs/Working_with_windows_in_chr...

id:pooh2005

おお! 完璧です。 ありがとうございました!

2007/08/23 18:08:19
  • id:northapple
    myWindow.xulのソースで
    if("arguments" in window &amp;&amp;
    となっているところは、正しくは
    if("arguments" in window &&
    です。
    あと、参考サイトのリンクは
    http://developer.mozilla.org/ja/docs/Working_with_windows_in_chrome_code
    です。お詫びして訂正いたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません