過去ログ

                                Page      33
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼フレーム分割されているページの文字列の取得方法  ジョージ 02/9/30(月) 19:54
   ┗Re:フレーム分割されているページの文字列の取得方法  sim 02/9/30(月) 23:27
      ┗Re:フレーム分割されているページの文字列の取得方法  ジョージ 02/10/1(火) 10:13

 ───────────────────────────────────────
 ■題名 : フレーム分割されているページの文字列の取得方法
 ■名前 : ジョージ
 ■日付 : 02/9/30(月) 19:54
 -------------------------------------------------------------------------
   お世話になります。
ジョージと申します。

現在、マウスで選択した文字列をパラメータにしてアプリケーションを
起動するJavaScriptを作成しています。
しかし、Webページが1枚の時はうまくいくのですが、ページがFrame分割されている時
上手く文字列を取得できません。(Nullになってしまいます。)

------------------------------------------------------------------------
function getSelectedStr()
{
  var bugweb = new ActiveXObject("BugWeb.BugBrowserAPI");
  var docview = bugweb.CreateDocumentViewObject(bugweb.ActiveView);

  var sel_str = docview.document.selection.createRange().text + "";

  return sel_str;
}

------------------------------------------------------------------------

どなたかご存じの方がいらっしゃるようならば、ご教授をお願い致します。

 ───────────────────────────────────────  ■題名 : Re:フレーム分割されているページの文字列の取得方法  ■名前 : sim  ■日付 : 02/9/30(月) 23:27  -------------------------------------------------------------------------
   文字列が選択されているフレームのdocumentオブジェクトは、
以下のようにすれば取得できるはずです。
document.activeElementとactiveElement.contentWindowがポイントのようです。

var doc = docview.document;
try {
    while (doc.activeElement.tagName.match(/frame/i) != null) {
            doc = doc.activeElement.contentWindow.document;
    }
}
catch(e) {
    bugweb.ShowMessage("アクティブなフレームの取得エラーです。\n" + e.description);
    doc = docview.document;
}

こうやって取得したdocumentに対してselection.createRange().textなりで
選択中のテキストが得られます。
フレーム間でドメインが違う場合、セキュリティの関係上エラーになります。
あと、contentWindowはIE5.5以上?なので、バージョンが古いとダメだったはずです。


#タブブラウザのスクリプト関係のスレッドから順番に話題が回ってきた感じですね…

 ───────────────────────────────────────  ■題名 : Re:フレーム分割されているページの文字列の取得方法  ■名前 : ジョージ  ■日付 : 02/10/1(火) 10:13  -------------------------------------------------------------------------
   丁寧なご返答ありがとうございました。

>文字列が選択されているフレームのdocumentオブジェクトは、
>以下のようにすれば取得できるはずです。
>document.activeElementとactiveElement.contentWindowがポイントのようです。

>こうやって取得したdocumentに対してselection.createRange().textなりで
>選択中のテキストが得られます。
>フレーム間でドメインが違う場合、セキュリティの関係上エラーになります。
>あと、contentWindowはIE5.5以上?なので、バージョンが古いとダメだったはずです。

おかげ様で無事文字列を取得することができました。

>#タブブラウザのスクリプト関係のスレッドから順番に話題が回ってきた感じですね…

そうなんですか?
私はBugBrouserしか使ったことがないから判りませんが・・・

とりあえず完成したので、アップしてみます。
プログラムとしては
選択した文字列をパラメータにしてアプリケーションを起動する
と言うものです。
私は選択した文字列を電子辞書で調べるようにしています。
プログラム中の

// アプリケーションパス
var APPLICATION_PATH = "C:\\Program Files\\DDwin\\ddwin.exe";

// アプリケーション起動時固定パラメータ
var APPLICATION_PARAM = ",1,国語,1,";

部分を変更すれば任意のアプリケーションを起動するようになります。
そんなに使用用途は無いかと思いますが。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 33