2010-01-23 51 views
4

我有一個書籤,需要打開一個新的窗口/選項卡。爲了避免彈出窗口阻止程序,我需要直接在小書籤中調用window.open()方法,即:在瀏覽器級別。可以通過頁面級腳本調用書籤中定義的函數嗎?

但是,我想通過加載外部Javascript文件來保持bookmarklet可更新。爲此,書籤小節需要將腳本節點附加到DOM。如果我要將window.open()代碼放入其中一個外部加載的腳本中,則彈出式窗口攔截器會自其頁面級別以後阻止它。

我想知道的是,如果我可以在我的小書籤中創建一個圍繞window.open()的包裝函數,然後從外部加載的腳本調用它?這個包裝的範圍和權限是什麼?

+0

是否有可能'window.open()'的名稱,然後注入東西到窗口後? – 2010-05-23 03:16:30

回答

1

我想出了一個解決方案,它並不完美,但符合要求:

這裏是書籤代碼:

javascript:window.open(window.location);window.location="http://www.google.com/";var%20s=document.createElement('script');s.setAttribute('src','http://my-script.js');document.body.appendChild(s);void(0); 

的可讀一步一步相當於福利:

window.open(window.location);    // Clone the current tab 
window.location = "http://www.google.com/"; // Navigate to the desired page url 
var s = document.createElement('script'); // Create the script 
s.setAttribute('src','http://my-script.js'); // 
document.body.appendChild(s);    // Embed it into current document 

只剩下一個問題:默認情況下,您要顯示的頁面未處於活動狀態。克隆的是。

0

我想知道這種方法是否可行 - 很高興看到它的確如此。

這裏的一般問題是瀏覽器不會讓你打開一個新的窗口,而不是直接用戶交互。所以你不能從遠程腳本打開窗口。

您正在打開窗口直接從書籤,移動到該位置,然後調用遠程腳本。

我選擇的另一種方法是將遠程腳本的內容直接移動到書籤。這對我簡單的應用程序來說很好。我寫了on my blog

相關問題