Firefox userChrome.js greasemonkeyスクリプトスレ14at SOFTWARE
Firefox userChrome.js greasemonkeyスクリプトスレ14 - 暇つぶし2ch981:名無しさん@お腹いっぱい。
11/04/03 14:07:15.36 TRO96ja40
firefox拡張機能スレより誘導されてきました。

custom buttonのスクリプトで、フレームを指定する場合はどのように指定すれば良いのでしょうか?
ローカルで作成したフレーム構成のページにアクセスし、ボタンを押す事でフレームの一部をあらかじめ
指定したページに飛ばす、というボタンを作りたいと考えています。

構成としては親フレームのmain.html、親フレームから呼び出されるname="FRAME1"、name="FRAME2"という
子ページが2つあります。
FRAME1に対してページの移動を行いたいと思い、
window.top.FRAME1.content.document.location = "URLリンク(google.co.jp)";
このように指定しました。
しかし、「エラー: window.top.FRAME1 is undefined」が出てしまいました。

982:名無しさん@お腹いっぱい。
11/04/03 14:14:11.77 I2cEQh+Z0
>>979
レスありがとう。
例えばページ内検索バーをCtrl+Fで開閉させるアドオンやjsはすぐに見つかるんだけど
単機能のものを細切れに追加していくと無駄に負担が大きくなるだけかなと思って追加するの躊躇ってたんだ
どっちにしろコードが増えることに変わりないんだから書かないのに比べて重くなるんだね

983:名無しさん@お腹いっぱい。
11/04/03 15:39:49.53 h6Ncsmrb0
>>980
前者か。そのものズバリのコードをすぐに出すのは俺ではちょっと無理(つーか、面倒)だわ。
ごめん。他の人を頼ってくれ。

一応、アドバイスっぽいもの。

まずメニューに追加するのからして面倒。
拡張の Add Bookmark Here2 がメニュー追加をやってるので、参考にするといい。
ちょっと見たら、PlacesViewBase.prototype._onPopupShowing を改造すればいいっぽい。
ブックマークコンテキストメニューの方に追加するならXULを弄るだけだから楽なんだが…。

で、肝心のフォルダ選択・開く方は、拡張の Manage Folders を参考にすればいいと思う。
管理画面でフォルダを開く拡張だけど、やる事はかなり似てる。
ツリー取得の部分をブックマークサイドバーのツリーに置き変えて…ってやればいいんじゃないかな。

984:名無しさん@お腹いっぱい。
11/04/03 15:40:30.74 bEoIHZQW0
google仕様変更でAutoPagerizeやGoogleMonkeyR
画像検索での GIS_AutoPager.user.jsが For_GIS_AutoPager
が動かなくなってるわ。もう一度0から作り直して原因突き止めないといけないんか・・・

985:名無しさん@お腹いっぱい。
11/04/03 15:50:05.81 h6Ncsmrb0
>>981
俺はcustom button使ってないしよくわからんのだが、
そのmain.htmlってのはタブにロードしてるんだよね?
window.content.FRAME1.location = "http://~";
じゃないか?
Webコンソールで色々打ち込んで確認してみればいいのに。

986:名無しさん@お腹いっぱい。
11/04/03 16:01:45.58 YpfyLJug0
>>981
chromeなコードからコンテンツにアクセスするには window の代わりに window.content を使う
但しこのオブジェクトはセキュリティ上の理由からXPCNativeWrapper(Fx4ではXrayWrapper)で
ラップされてるので幾つかの制限事項がある
URLリンク(developer.mozilla.org)

制限によってフレーム名による直接アクセスができない(*)ので代わりに以下のように書く
const url = "URLリンク(www.google.co.jp)";
var win = window.content;
win.frames[0].location.href = url;

どうしても名前でアクセスしたいなら以下のようにも書ける
win.document.getElementsByName('FRAME1')[0].contentWindow.location.href = url;

でもname属性を使うのは古い方法。id属性を定義して以下のように書くのがベター
win.document.getElementById('FRAME1').setAttribute("src", url);


(*) wrappedJSObjectでラップを剥がせば以下のようにも書けるけど非推奨
var win = window.content.wrappedJSObject;
win.FRAME1.location.href = url;

987:名無しさん@お腹いっぱい。
11/04/03 16:04:22.92 h6Ncsmrb0
あ、ごめん、すごい馬鹿言った。985は無しで(/ω\)ハズカシーィ

988:名無しさん@お腹いっぱい。
11/04/03 16:07:39.26 h6Ncsmrb0
うひぃぃ、しかも直前に詳細な解説が
 ∧||∧
(  ⌒ ヽ
 ∪  ノ
  ∪∪

989:名無しさん@お腹いっぱい。
11/04/03 16:40:55.42 NAJ7yW1a0
openLibraryContextMenu.uc.xul

990:名無しさん@お腹いっぱい。
11/04/03 17:22:20.38 NAJ7yW1a0
を参考にすればいいんじゃない >>978

991:名無しさん@お腹いっぱい。
11/04/03 17:32:41.21 YpfyLJug0
>>978
でけた [1/3]

var OpenBMFolderInSidebar = {
  init: function(){
    eval('PlacesViewBase.prototype._onPopupShowing='+PlacesViewBase.prototype._onPopupShowing.toString().replace(
      'this._mayAddCommandsItems(popup);',
      '$&; OpenBMFolderInSidebar.onPopupShowing(popup);'
    ));
  },
  onPopupShowing: function(aPopup){
    if(aPopup._endOptOpenBMInSidebar) return;
    var menuitem = document.createElement("menuitem");
    menuitem.setAttribute("label", "Open In Sidebar");
    menuitem.setAttribute("oncommand", "OpenBMFolderInSidebar.openInSidebar(this.parentNode._placesNode, event)");
    aPopup.appendChild(menuitem);
    aPopup._endOptOpenBMInSidebar = menuitem;
  },
  // つづく

992:名無しさん@お腹いっぱい。
11/04/03 17:37:46.75 YpfyLJug0
[2/3]

  openInSidebar: function(aNode, aEvent){
    var targetNode = aNode;
    var sidebar = document.getElementById("sidebar");
    if(sidebar.currentURI.spec != "chrome://browser/content/bookmarks/bookmarksPanel.xul"){
      sidebar.addEventListener("load", function(){
        sidebar.removeEventListener("load", arguments.callee, true);
        window.setTimeout(function(){
          OpenBMFolderInSidebar.selectFolder(OpenBMFolderInSidebar.getBMTree(sidebar), targetNode);
        }, 100); //← 適当にウェイトを調整
      }, true);
      toggleSidebar("viewBookmarksSidebar");
    }else{
      OpenBMFolderInSidebar.selectFolder(OpenBMFolderInSidebar.getBMTree(sidebar), targetNode);
    }
  },
  // つづく

993:名無しさん@お腹いっぱい。
11/04/03 17:39:02.02 YpfyLJug0
[3/3]

  getBMTree: function(aSidebar){
    return aSidebar.contentDocument.getElementById("bookmarks-view");
  },
  selectFolder: function(aTree, aTargetNode){
    var view = aTree.view;
    aTree.selectItems([aTargetNode.itemId], true);
    var index = view.selection.currentIndex; if(index < 0) return;
    if(!view.isContainerOpen(index)) view.toggleOpenState(index);
    aTree.treeBoxObject.ensureRowIsVisible(index);
    aTree.focus();
  }
};
OpenBMFolderInSidebar.init();

994:名無しさん@お腹いっぱい。
11/04/03 17:40:17.89 AGR2pHtH0
>>990
おつかれ

995:名無しさん@お腹いっぱい。
11/04/03 17:54:18.58 pN/vprQf0
>>703と似た内容かもしれませんが、
例えば50msでページ縦サイズの5分の1、下にスクロールするという動きを実現するには
どういうようなスクリプトを書けばいいでしょうか?

996:名無しさん@お腹いっぱい。
11/04/03 18:03:23.64 YpfyLJug0
>>995
setInterval で 1ms 毎に 縦サイズ÷5÷50 だけスクロールするようにすればいいんでないの

997:名無しさん@お腹いっぱい。
11/04/03 18:08:00.35 YpfyLJug0
言い忘れたけど>>991-993 はFirefox 4用。他の環境で動くかは試してない
(>>978 が動作環境を書いてなかったので)

998:名無しさん@お腹いっぱい。
11/04/03 18:29:13.68 FSNLh2dv0
大変だ
次スレが無いぞ

999:名無しさん@お腹いっぱい。
11/04/03 18:33:40.70 NAJ7yW1a0
ウメ

1000:名無しさん@お腹いっぱい。
11/04/03 18:34:00.48 NAJ7yW1a0
1000

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch