2013-09-30 57 views
-1

比方說,我有一個基於框架的網頁,它看起來像這樣:有沒有辦法通過Greasemonkey在命名框架(而不是所有框架)中運行我的JS代碼?

+-------------+---------------------------------------------------------+ 
|    |   header          | 
|    +---------------------------------------------------------+ 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |   main           | 
| menu  |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    |               | 
|    +---------------------------------------------------------+ 
|    |   footer          | 
+-------------+---------------------------------------------------------+ 

正如你可以看到,有一個名爲main框架。當用戶點擊menu框架菜單ITESM,任何頁面(任何URL)可以在main框架加載。現在我想要的只是在頁面中加載main框架中的一段代碼。正如我所描述的,這將是在main幀負載的頁面沒有一個URL模式,所以我不能指定在greasemonkey腳本的模式。有沒有辦法做到這一點?

謝謝。

+0

我會給「主」框架中的'onload'事件偵聽器,因此,當一個新的頁面加載它,一個函數被調用。 –

回答

0

的問題是不明確的。如果你的意思是一個老式的(和HTML5過時的)框架,如:

<frameset ...> 
    <frame name="header" src="header.htm"   ></frame> 
    <frame name="menu" src="menu.htm"    ></frame> 
    <frame name="main" src="ANY_DOMAIN/page.htm" ></frame> 
    <frame name="footer" src="footer.htm"   ></frame> 
</frameset> 

,那麼你必須設置你的Greasemonkey腳本用來觸發所有可能的「主」框架中打開的網頁可能。

下面是做這件事:

// ==UserScript== 
// @name  _Fire on any page, but only when it is the frame named "main" 
// @include * 
// ==/UserScript== 

//-- Run in (i)framed page only, not in parent page. 
if (window.top != window.self) { 
    if (window.name == "main") { 

     // PLACE YOUR DESIRED CODE HERE. 
    } 
} 

重要:

  1. 使用@include *只能作爲最後的手段。調整你的@include@exclude@match語句儘可能只在您所期望的頁面運行在一個名爲「主」的框架加載。
  2. 如果這些框架都是相同的域名那麼你有更多的選擇。您可以運行om框架集頁面並根據需要將代碼注入框架。爲此打開一個新問題。
  3. 測試與版本4.01文檔類型,在Firefox。其他瀏覽器和HTML5可能不同或不可能。
相關問題