人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

XULで作ったiframeに任意のページを表示させ、そのページの値を取得したり、値を設定したいと思い以下のコードを書きましたが、動きません。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<page id="app-window" title="" width="100%" height="100%" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<iframe flex="1" id="mainFrame" type="content" src="http://www.google.co.jp/"/><!-- 例としてGoogleを用いています -->
<script type="text/javascript"><![CDATA[
const VAL = "test";
var p = document.getElementById("app-window");
var f = document.getElementById("mainFrame");
f.addEventListener("load", function () {
p.setAttribute("title", f.contentDocument.title); // titleを設定する
alert(f.contentWindow.google.toSource()); // ページ中の任意の値を取得する
f.contentWindow.test = VAL; // 任意の値をページ中に設定する
}, false);
]]></script>
</page>

簡単に言えば、セキュリティーの緩いGreasemonkeyをXUL上で行いたいということになると思います。Firefox3.5で動けば問題ないです。

●質問者: ofk
●カテゴリ:インターネット ウェブ制作
✍キーワード:CDATA const Google Greasemonkey test
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● meefla
●10ポイント

<page> 要素を使っているのが敗因ではないでしょうか?


page - MDC

Similar to a window , except it should be used for XUL files that are to be loaded into an iframe .

<iframe> の中に読み込まれる XUL ファイルでないと <page> は使えないような。


<page> 要素ではなく <window> 要素なら、中においた <iframe> 中に任意の URL を読み込める筈です。


<window id="app-window" title="" width="100%" height="100%" 
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <iframe flex="1" id="mainFrame" type="content" src="http://www.google.co.jp/"/>
</window>

ただ、<iframe> 中に読み込んだ文書からデータを取り出したりしてあれこれする、という部分は経験がないと言うか、うまくいっていない部分なので、

(読み込んだページをスクロールダウンしたいんですが)

お力にはなれないかもしれません。


コメント欄を開けておいていただけるとありがたいのですが。

◎質問者からの返答

page要素でも<iframe>に任意のURLを読むところまではできますね。

質問の確認になりますが、<iframe>中に読み込んだ文書にあれこれしたいというが今回の質問です。

XULに詳しい方をあまり知らないので、力になってもらえるとうれしいです。というわけで、コメント欄を空けておきました。


2 ● kebo987654
●60ポイント ベストアンサー

以下のサンプルで動きました。(Firefox3.5.2)

※iframe内の値を取得・設定するにはセキュリティーの制限をなくす必要があるので、XULファイルをchromeドキュメント内に置いてください。

chromeドキュメント内に置く方法:

下記ページの<chrome URIについて>の部分を見てください。

Firefoxからの実行とXULRunnerからの実行の共存 - MEMO:はてな支店

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" title="" id="app-window">

<browser flex="1" src="http://www.google.co.jp/" type="content-primary" id="mainFrame" />

<script type="application/x-javascript"><![CDATA[

const VAL="test";
var page=document.getElementById("app-window");
var frame=document.getElementById("mainFrame");

frame.addEventListener("load",function(){
var win=frame.contentWindow.wrappedJSObject,//mainFrameのwindowオブジェクト。contentWindowのままだとXPCNativeWrapperに包まれていて変数の設定等ができないので注意。
 doc=frame.contentDocument.wrappedJSObject;//mainFrameのdocumentオブジェクト。

page.setAttribute("title",doc.title);
alert(win.google.toSource());
win.test=VAL;
},false);

]]></script>

</page>
◎質問者からの返答

ありがとうございます! これで動けば、これが求めていた回答です。

しかし、Firefox上での実行に疎く、chromeドキュメントも初耳であったため、現在、動かすことすらままなっていません。

という手順ではchromeドキュメントとして開いていないようで、求めている動作をしませんでした。明らかに間違っている箇所があれば、教えて頂けると助かります。

一応、環境の都合、XULRunnerは無しで模索しています。

自己解決しました。chrome URIなので、chrome://tests/content/test.xulにアクセスしないといけないのですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ