MozTW 討論區
https://forum.moztw.org/

有沒有人可以幫我改一改這一段程式碼呢?
https://forum.moztw.org/viewtopic.php?f=18&t=13453
1 頁 (共 2 頁)

發表人:  mercichao [ 2006-03-30, 21:48 ]
文章主題 :  有沒有人可以幫我改一改這一段程式碼呢?

這是一個叫 "Reload" 的套件的程式碼, 這個套件自己弄了一個按鈕, 在按鈕上按右鍵可以重新載入所有分頁, 但是同時又會出現了選單 (平時在工具列上按右鍵時出現的選單)
可不可以幫我改成在按鍵上按右鍵, 但不會出現選單的呢?
因為沒有作者的電郵地址, 也沒有首頁, 找不到作者...
有沒有人可以幫幫我呢..? :cry:


代碼:
function reload(shift, ctrl, alt, button){
var nsIWebNavigation = Components.interfaces.nsIWebNavigation;

   //ctrl and alt passed for completeness and to make any subsequent upgrades easier
   if(shift){   //Reload pages from server
      switch(button){
      case 0:
         //Left Button - Reload page
         BrowserReloadSkipCache();
         break;
      case 1:
         //Middle Button - Load page in new tab
         var url = window._content.document.location.href;
         var tab = gBrowser.addTab("about:blank");
         gBrowser.selectedTab = tab;
         gBrowser.loadURIWithFlags(url, nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE, null, null);
         break;
      case 2:
         //Right Button - Reload all tabs
         var l = gBrowser.mPanelContainer.childNodes.length;
         for(var i = 0; i < l; i++) {
            var b = gBrowser.getBrowserAtIndex(i);
            try {
               b.reloadWithFlags(nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
            } catch(e) {}
         }
         break;
      default:
         BrowserReloadSkipCache();
         break;
      }
   }else{   //Reload pages from cache
      switch(button){
      case 0:
         //Left Button - Reload page
         BrowserReload();
         break;
      case 1:
         //Middle Button - Load page in new tab
         var tab = gBrowser.addTab(window._content.document.location.href);
         gBrowser.selectedTab = tab;
         break;
      case 2:
         //Right Button - Reload all tabs
         gBrowser.reloadAllTabs();
         break;
      default:
         BrowserReload();
         break;
      }
   }
}


附加檔案:
1.jpg [61.07 KiB]
被下載 666 次

發表人:  Amauds [ 2006-03-30, 22:31 ]
文章主題 : 

也許該查查 event.preventBubble(); 的用法

發表人:  mercichao [ 2006-03-31, 17:53 ]
文章主題 : 

我知道用 preventDefault(), 但就是不會用才找人幫忙吧... :(
我沒有學過 javascript...

發表人:  Amauds [ 2006-03-31, 21:11 ]
文章主題 : 

mercichao 寫:
我知道用 preventDefault(), 但就是不會用才找人幫忙吧... :(
我沒有學過 javascript...

我的意思是有關介面佈建的 XUL 檔,
這個套件一定有某個檔其包含著按鈕的各項細節(外型、位置、啟動機制等...)
它可能是 javascript 檔,也可能是 XUL 檔,
當按鈕放置於工具列之上時,觸發事件不只是傳遞給按鈕,也會傳給工具列,
若是沒有通知系統已將事件處理完畢,則該事件將持續發生直到某個元件通知系統事件結束。

根據你的描述,按鈕被以右鍵觸發後,而工具列的選單也會被觸發,
知道其中的關聯性了嗎?

發表人:  mercichao [ 2006-03-31, 21:27 ]
文章主題 : 

Amauds 寫:
我的意思是有關介面佈建的 XUL 檔,
這個套件一定有某個檔其包含著按鈕的各項細節(外型、位置、啟動機制等...)
它可能是 javascript 檔,也可能是 XUL 檔,
當按鈕放置於工具列之上時,觸發事件不只是傳遞給按鈕,也會傳給工具列,
若是沒有通知系統已將事件處理完畢,則該事件將持續發生直到某個元件通知系統事件結束。

根據你的描述,按鈕被以右鍵觸發後,而工具列的選單也會被觸發,
知道其中的關聯性了嗎?

這個我也當然知道啦...=.="
我當然明白它的原理, 也知道我大概要做些甚麼, 就是不知要把程式碼修改成怎麼樣子嘛...
我的意思是, 我沒學過 javascript, 不會用語法加入這一個小小的功能, 有哪一位大大肯抽少少時間可以幫我適當地加這麼一小小的一句 preventDefault() 上去... :cry:

發表人:  Amauds [ 2006-03-31, 21:39 ]
文章主題 : 

mercichao 寫:
我的意思是, 我沒學過 javascript, 不會用語法加入這一個小小的功能, 有哪一位大大肯抽少少時間可以幫我適當地加這麼一小小的一句 preventDefault() 上去... :cry:

這個套件只有這麼一個
代碼:
function reload(shift, ctrl, alt, button){ ... }
函數而已嗎?

發表人:  mercichao [ 2006-03-31, 21:49 ]
文章主題 : 

引言回覆:
這個套件只有這麼一個
代碼:
function reload(shift, ctrl, alt, button){ ... }
函數而已嗎?

是的, 那些程式碼屬於一個叫 reload.js 的檔案 (裏面的程式碼只有上述這麼多),
有另一個檔案呼叫它的:

reloadOverlay.xul
代碼:
<?xml version="1.0"?>

<overlay id="reloadOverlay"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   
   <script type="application/x-javascript" src="chrome://reload/content/reload.js" />
   
   <toolbox id="navigator-toolbox">
      <toolbar id="nav-bar">
         <toolbarbutton
               onclick="reload(event.shiftKey, event.ctrlKey, event.altKey, event.button);"
               id="reload-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
               label="Reload" tooltiptext="Reload current page" context=""/>
      </toolbar>
   </toolbox>
</overlay>


套件的網址:
https://addons.mozilla.org/extensions/m ... 10&id=1410

發表人:  yuoo2k [ 2006-03-31, 22:26 ]
文章主題 : 

試試 XUL 裡頭把 event.preventBubble(); 附加在 onClick 事件的 reload(...); 處理後...
像這樣...
onclick="reload(event.shiftKey, event.ctrlKey, event.altKey, event.button); event.preventBubble();"

發表人:  mercichao [ 2006-04-01, 08:36 ]
文章主題 : 

行了耶~! :lol:
謝謝您喔~~ :idea:

發表人:  mercichao [ 2006-04-01, 17:44 ]
文章主題 : 

我還有一個問題要麻煩大大幫忙的.. :oops:
有甚麼辦法才能令上述程式碼中, reload(...) 這個函數每當分頁數是 1 , currentPage 是 about:blank 的時候就不生效:?:

(小弟還差這一步就能把這個套件變完美了 :twisted: )

發表人:  yuoo2k [ 2006-04-01, 20:13 ]
文章主題 : 

試試在 reload() 函式的一開頭加入...
代碼:
if (gBrowser.currentURI.spec == "about:blank") return;

發表人:  mercichao [ 2006-04-01, 21:53 ]
文章主題 : 

嗯~ 這個行得通, 那這樣呢~?
引言回覆:
if (分頁數目 == 1 而且 gBrowser.currentURI.spec == "about:blank") return;

又應該怎麼寫 ? :oops:

發表人:  kourge [ 2006-04-01, 23:11 ]
文章主題 : 

if (分頁數目 == 1 && gBrowser.currentURI.spec == "about:blank") return;

分頁數目我不知道要怎麼寫orz

發表人:  yuoo2k [ 2006-04-02, 00:52 ]
文章主題 : 

要抓 Tabs,我 IE Tab 裡是這樣子列舉出來的:
代碼:
var mTabs = gBrowser.mTabContainer.childNodes;
for(var i = 0 ; i < mTabs.length ; i++) {  // 巡覽每個 mTabContainer 的 childNodes
   if (mTabs[i].localName == "tab") {  // 如果 mTabs[i] 為 Tab 時,做XXX...
............
   }
}

不知有沒有更簡單能取 Tabs 數目的方法...@@

發表人:  mercichao [ 2006-04-02, 09:37 ]
文章主題 : 

我把其中一段程式碼:
引言回覆:
if (e.attrName == 'disabled') {
   stopButton.setAttribute('disabled', 'false');
}


改成為這樣:
引言回覆:
var mTabs = gBrowser.mTabContainer.childNodes;
for(var i = 0 ; i < mTabs.length ; i++) {

   if (e.attrName == 'disabled' && mTabs[i].localName == "tab") {
     stopButton.setAttribute('disabled', 'false');
   }
}


但無論分頁數目是否 1, stopButton.setAttribute() 還是會執行 (測試過跟 e.attrName == 'disabled' 這個判斷條件無關)
是否我有甚麼地方會錯意呢?

1 頁 (共 2 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/