MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2024-04-16, 18:17

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 26 篇文章 ]  前往頁數 上一頁  12
發表人 內容
文章發表於 : 2010-08-24, 23:14 
離線

註冊時間: 2010-05-21, 03:08
文章: 29
ettoolong 寫:
u881831 寫:
1.修正拖出成新視窗時圖示跑掉,
就是跑掉後再指定一次圖示,
目前還沒想到要怎樣做比較好,
每次resize做的話效能不佳。

事件會產生,但重置圖示就是失敗 Orz
代碼:
var tabEventTest = {
  handleEvent: function(event) {
    switch(event.type) {
      case 'load':
        this.init();
        break;
      case 'unload':
        this.uninit();
        break;
    }
  },

  init: function() {
       //gBrowser.setAttribute('ondragend','tabEventTest.DoSomeThing(event);'+gBrowser.getAttribute('ondragend') );
      gBrowser.mTabContainer.addEventListener("dragend", function(event) { alert('end drag'); }, true);
      gBrowser.tabContainer.addEventListener("TabMove", function(event) { alert('move tab'); }, false);
    window.addEventListener('unload', this, false);
  },

  uninit: function() {
    window.removeEventListener('unload', this, false);
  }
}
window.addEventListener('load', tabEventTest, false); 

在事件發生的時候更改圖示是會失敗,
不過要是延遲個一小段時間再改就會成功,
根據電腦配備的不同需要的延遲時間可能會超過0.5秒。
另外這邊使用window的load事件好像不會在產生新視窗時發生,
也就是新視窗不會監控TabMove 和dragend 事件,
所以在拖出新視窗後新增分頁再拖出去圖示就跑掉了。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-24, 23:52 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
u881831 寫:
在事件發生的時候更改圖示是會失敗,
不過要是延遲個一小段時間再改就會成功,
根據電腦配備的不同需要的延遲時間可能會超過0.5秒。
另外這邊使用window的load事件好像不會在產生新視窗時發生,
也就是新視窗不會監控TabMove 和dragend 事件,
所以在拖出新視窗後新增分頁再拖出去圖示就跑掉了。

忘了說明,這一段我是放在類似 bbsfoxOverlay.js 這樣的檔裡面(overlay層的,火狐啟動就載入了),
所有的窗都會有事件(包括http的窗),我必須用
GBBSCore.prototype.isOnBBSPage = function() {
...
...
}
去檢查它是不是BBS窗。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-26, 10:19 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
u881831 寫:
這應該是開啟了使用文字超級拖放的情形吧,
事實上這個功能是從官方版的雙擊選取文字的模組改進而來的,
就是直接生HTML的DIV 出來,
因為選取區就直接是HTML元件所以可以用火狐內建的功能作文字拖放,
但是這樣就會遇到現在的BBSFOX一樣的問題,
選取區無法以文字的相反色反白,
文字無法拉寬,(因為這個模組一行就一個DIV 所以就直接錯位)
字型無法分開中英文,(可能我之後就統一用中文字型)
另外unicode 半寬字元也會造成錯位,(因為這個模組的關係很難處理)
還有在Linux 下問題會變得更嚴重。
我之後會再考慮看看要不要把這個模組整個換掉。

alex301 板友提到的這篇 https://developer.mozilla.org/en/DragDrop/Drag_and_Drop
加上:
類似 var dt = aEvent.dataTransfer;
用繪圖方式作選取區繪製,
在拖曳時另外產生拖曳事件後取出拖曳內容,然後把拖曳的內容替換成文字,
不知道能不能做超級拖放。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-28, 18:13 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
回報一個問題,這是在整合滑鼠瀏覽時造成的,如附圖,
簡單重現問題的方法就是,不要把Fx視窗最大化,讓它停在你桌面的右邊偏下方,
這時去double click視窗標題列,這時視窗會最大化,在最大化的過程中,只要你滑鼠去掃到文章的光棒區。
bbs的字體大小就會出問題,之後你光棒所到之處,字體大小都會錯。

請找一下在termview.js裡的這段:
代碼:
    onResizeTimeout: function() {
      this.doresize = false;
      this.resizeTimer.cancel();
      this.resizeTimer = null;
    },

    onResize: function() {
        this.doresize = true;
        {
        var _this=this;
        var func=function() {
          _this.onResizeTimeout();
        }
        if(this.resizeTimer)
          this.resizeTimer.cancel();
        this.resizeTimer = this.myTimer(false, func, 1000);
        }
   ...
   ...
   }

當時因為不知道怎麼解,所以在每次resize時, 我作一個1秒的delay,去阻止滑鼠瀏覽被作用(透過檢查 this.doresize),
但是看來delay一秒還不夠久,因此還是發生了如下圖的現像。
你可以看看有沒有比較正確的解法(不透過delay)或是再把delay加大一點。
(如果想更容易看到問題,就是把delay減小,然後一直用double click去作最大化和還原,會很容易重現,也方便debug。)


附加檔案:
mb.png [195.11 KiB]
被下載 257 次
回頂端
Mozilla/5.0 (Windows NT 5.1; rv:2.0b4) Gecko/20100818 Firefox/4.0b4 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-28, 18:22 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
另一個問題如附圖,在刪除中文字時,很容易在右邊產生一個三角形的殘留。
(沒有作雙位元偵測,刪第一下產生一個 <?> 刪第二下就留下右邊一小塊)


附加檔案:
draw.png [132.11 KiB]
被下載 252 次
回頂端
Mozilla/5.0 (Windows NT 5.1; rv:2.0b4) Gecko/20100818 Firefox/4.0b4 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-28, 23:24 
離線

註冊時間: 2010-05-21, 03:08
文章: 29
ettoolong 寫:
alex301 板友提到的這篇 https://developer.mozilla.org/en/DragDrop/Drag_and_Drop
加上:
類似 var dt = aEvent.dataTransfer;
用繪圖方式作選取區繪製,
在拖曳時另外產生拖曳事件後取出拖曳內容,然後把拖曳的內容替換成文字,
不知道能不能做超級拖放。

看起來應該是可以,
不過這樣實做下去拖曳時就會看到整個canvas被拖曳,
要實作只有選取區被拖曳可能不大容易。

ettoolong 寫:
回報一個問題,這是在整合滑鼠瀏覽時造成的,如附圖,
簡單重現問題的方法就是,不要把Fx視窗最大化,讓它停在你桌面的右邊偏下方,
這時去double click視窗標題列,這時視窗會最大化,在最大化的過程中,只要你滑鼠去掃到文章的光棒區。
bbs的字體大小就會出問題,之後你光棒所到之處,字體大小都會錯。

當時因為不知道怎麼解,所以在每次resize時, 我作一個1秒的delay,去阻止滑鼠瀏覽被作用(透過檢查 this.doresize),
但是看來delay一秒還不夠久,因此還是發生了如下圖的現像。
你可以看看有沒有比較正確的解法(不透過delay)或是再把delay加大一點。
(如果想更容易看到問題,就是把delay減小,然後一直用double click去作最大化和還原,會很容易重現,也方便debug。)

抱歉我把onResize裡面那段程式碼註解掉後仍然無法重現。
從圖上來看應該是找不到指定的字型,
我這邊是firefox 3.6.8 windows 7 x64 ,
請問你那邊的中英文字型各是?

[0829版本]抱歉依照這個步驟還是沒有辦法重現,
我稍微調整了顯示區塊光棒的程式減少不必要的動作,
可能還是要麻煩你測試一下這個問題還在不在。

[0830版本修正]

ettoolong 寫:
另一個問題如附圖,在刪除中文字時,很容易在右邊產生一個三角形的殘留。
(沒有作雙位元偵測,刪第一下產生一個 <?> 刪第二下就留下右邊一小塊)

因為程式判斷那個符號是全寬的字,
可是伺服器當它是兩個獨立的字,
在這種情況下伺服器只當它是半寬字只消去左半邊,
所以右半邊沒有消掉,
我會想看看有沒有辦法處理。
[0829/0830版本]以重繪該區塊的方式修正,
比較正確的修正應該是在伺服器端處理,(雙位元偵測也是)
像是PTT 就會直接把那個符號換成半形的 ? 所以不會出現這個問題。


最後由 u881831 於 2011-03-09, 18:05 編輯,總共編輯了 3 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-28, 23:36 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
u881831 寫:
抱歉我把onResize裡面那段程式碼註解掉後仍然無法重現。
從圖上來看應該是找不到指定的字型,
我這邊是firefox 3.6.8 windows 7 x64 ,
請問你那邊的中英文字型各是?

細明體和標楷體都用過,3.6.8和4.0beta3都可以重現這個問題,用的系統是XP Home。
產生問題的關鍵應該是在放大的過程中,滑鼠掃到光棒的地方,這時似乎卡住了font size。
之後在繪製字體的時候都會用放大前的小字顯示。(滑鼠瀏覽要開啟才會造成此問題)

如果放大前的視窗放在桌面的左上,double click放大的過程就來不及用滑鼠掃到顯示區,
放大前的視窗放在桌面的右下,double click放大的時候滑鼠就會剛好掃到顯示區。


最後由 ettoolong 於 2010-08-31, 09:26 編輯,總共編輯了 2 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-30, 11:38 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
u881831 寫:
[0829版本]抱歉依照這個步驟還是沒有辦法重現,
我稍微調整了顯示區塊光棒的程式減少不必要的動作,
可能還是要麻煩你測試一下這個問題還在不在。

影片已經附上(在上一篇),中英文字型都是細明體,
如果還有什麼需要測試和需要知道的資訊再提出吧。

[0830版本]確認修正了。影片為了避免無謂的下載,我這邊就先砍掉了。
謝謝up主持續修正這些問題,讓這個套件更完整了。


最後由 ettoolong 於 2010-08-31, 17:29 編輯,總共編輯了 4 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
 個人資料  
引用回覆  
文章發表於 : 2010-08-31, 00:23 
離線

註冊時間: 2010-05-21, 03:08
文章: 29
ettoolong 寫:
u881831 寫:
抱歉我把onResize裡面那段程式碼註解掉後仍然無法重現。
從圖上來看應該是找不到指定的字型,
我這邊是firefox 3.6.8 windows 7 x64 ,
請問你那邊的中英文字型各是?

細明體和標楷體都用過,3.6.8和4.0beta3都可以重現這個問題,用的系統是XP Home。
產生問題的關鍵應該是在放大的過程中,滑鼠掃到光棒的地方,這時似乎卡住了font size。
之後在繪製字體的時候都會用放大前的小字顯示。(滑鼠瀏覽要開啟才會造成此問題)

如果放大前的視窗放在桌面的左上,double click放大的過程就來不及用滑鼠掃到顯示區,
放大前的視窗放在桌面的右下,double click放大的時候滑鼠就會剛好掃到顯示區。

[0829版本]我有看一下你改的地方,redraw放在timeout裡面才對,我之前寫的方式應該會有問題,
不過剛剛試了一下,問題還在,我還是能重現這個問題,我明天錄一段影片上來好了。

我做4次double click放大,影片中的第2和第4次是有出問題的。
影片我放在這邊
因影片所提問題已修正並且影片本身已刪除,所以刪除這邊的連結
ettoolong 寫:
解開後有95MB

我在一台2003的機器重現問題了,
好像不是滑鼠瀏覽的問題。
之前我有發現TermView::redraw有可能和TermView::onResize發生衝突,
所以我讓程式執行onResize時所有redraw的呼叫都不執行,
因為後面執行的redraw會自動執行之前跳掉的部分,
但是執行redraw時就不能直接跳掉onResize了。

redraw裡面使用了這一段程式碼
代碼:
ctx.font=ctx.font.replace(/px .+$/, 'px ' + this.fontFace);

讀取canvas字型似乎很花時間,
我這邊就把這一段改成比較有效率的寫法,
改完後我這邊機器的問題就消失了。
因為Windows 7 不會出問題只有舊版的才會,
應該是系統執行js效能的問題,
像是延遲執行onResize等可能不是個完美的方法。(每個系統需要的延遲時間不一樣)


最後由 u881831 於 2010-09-02, 02:07 編輯,總共編輯了 1 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-08-31, 15:00 
離線
[MozTW 版主群]

註冊時間: 2009-07-06, 18:15
文章: 418
u881831 寫:
redraw裡面使用了這一段程式碼
代碼:
ctx.font=ctx.font.replace(/px .+$/, 'px ' + this.fontFace);

讀取canvas字型似乎很花時間,
我這邊就把這一段改成比較有效率的寫法,
改完後我這邊機器的問題就消失了。
因為Windows 7 不會出問題只有舊版的才會,
應該是系統執行js效能的問題,
像是延遲執行onResize等可能不是個完美的方法。(每個系統需要的延遲時間不一樣)

[0830版本]確認修正了。影片為了避免無謂的下載,我這邊就先砍掉了。
這個修正應該也滿值得官方版本參考的。

另外,在滑鼠瀏覽模式下長按滑鼠左鍵送出Enter這個選項部份看要不要加入。
BBSFox 目前的處理是:[長按左鍵一秒 & 畫面無任何選取] 送出一個Enter (長按一秒以上或更久不重複觸發)。
提供做個參考。

還有個問題,選擇[自動調整字型大小(調整長寬比)],這時,把視窗縮到極小,再拉回,
會彈出個錯誤。

彈出在錯誤主控台的訊息:
代碼:
錯誤: uncaught exception: [Exception... "An invalid or illegal string was specified"  code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"  location: "chrome://pcmanfx2/content/termview.js Line: 709"]


錯誤發生後,就沒辦法從某行的中間開始圈選文字,只要圈選就會整行整行圈選。

操作影片:
已經修正,影片為了避免無謂的下載,我這邊就先砍掉了。


最後由 ettoolong 於 2010-09-01, 00:38 編輯,總共編輯了 1 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
文章發表於 : 2010-09-01, 00:14 
離線

註冊時間: 2010-05-21, 03:08
文章: 29
恕刪部分引言

ettoolong 寫:
另外,在滑鼠瀏覽模式下長按滑鼠左鍵送出Enter這個選項部份看要不要加入。
BBSFox 目前的處理是:[長按左鍵一秒 & 畫面無任何選取] 送出一個Enter (長按一秒以上或更久不重複觸發)。
提供做個參考。

[0831新增]
其實我覺得劃一個區塊出來可能比較好,
但是對已經習慣舊有模式的使用者而言再改變區塊定義會很麻煩。
雖然直接用滑鼠手勢可能比長按左鍵方便,
不過我想這邊還是和BBSFOX統一比較好。

ettoolong 寫:
還有個問題,選擇[自動調整字型大小(調整長寬比)],這時,把視窗縮到極小,再拉回,
會彈出個錯誤。

彈出在錯誤主控台的訊息:
代碼:
錯誤: uncaught exception: [Exception... "An invalid or illegal string was specified"  code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"  location: "chrome://pcmanfx2/content/termview.js Line: 709"]


錯誤發生後,就沒辦法從某行的中間開始圈選文字,只要圈選就會整行整行圈選。

[0831修正]
這是因為我當初沒有特別去寫錯誤處理的程式碼,
當視窗縮到最小文字長寬變成零,
然後變動長寬比的程式碼就會出現除以零的錯誤,
之後就算把視窗拉回來當掉的onResize函式依然不會執行,
於是圈選文字時程式就沒有辦法正確知道滑鼠的位置。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 26 篇文章 ]  前往頁數 上一頁  12

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 5 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群