2014-12-05 50 views
0

有沒有其他方式注入我自己的JavaScript到另一個頁面而不更改其url? 例如看看這個網站: http://somadesign.ca/projects/fontfriend/除了運行javascript之外的其他方法:從url?

它正在通過進入URL地址長腳本, 是這樣的: 的javascript:{腳本代碼} 後來注入腳本到任何網站。

有沒有其他更自動,更簡單的方法來做到這一點?

+4

它被稱爲小書籤,它利用'javascript:'僞協議。 Brendan Eich在Netscape中有意實現它。但是,我認爲這就夠了。向前邁進一步,可能會轉向XSS。是的,你想要XSS?很棒... – Leo 2014-12-05 08:20:14

+0

因爲有一個網站有視頻播放器,但是這個播放器沒有能力顯示下載。所以我想加載視頻-js播放器,替換默認播放器,然後加載子軌道。而且由於這個功能的目標是年齡在50-80歲的人,所以它必須儘可能簡單。 – 2014-12-05 09:58:52

+0

然後,一個小書籤是要走的路。 – 2014-12-05 10:22:55

回答

1

你可以通過腳本(JavaScript代碼的小片段改變網站的行爲)來實現這一點。

Userscripts通常有類似的格式:

// ==UserScript== 
// @name Example Script 
// @description Whatever it does 
// @match http://www.example.com/* 
// @require http://code.jquery.com/jquery-latest.js 
// ==/UserScript== 
alert("hello"); 

這裏重要的是行開始@match,指定當你的腳本應該運行。上面的示例會在您訪問網址以http://www.example.com/開頭的頁面時提醒您「hello」。 @require允許你導入其他腳本,比如jQuery。

爲了讓生活更輕鬆,大多數人使用一個userscript管理器,如TampermonkeyGreasemonkey。這些允許您在瀏覽器中編輯,調試和一般的腳本。他們也爲你照顧寶寶。

如果你有興趣,我寫了一個short tutorial關於如何設置和Tampermonkey開始。

+0

這個答案本身是一個不錯的嘗試。然而根據OP的要求(老年人),這是不實際的: – Leo 2014-12-06 09:16:29

+0

是的,OP在編輯中增加了這個要求,我同意,對於OP以外的任何人(即老年人的聽衆),這種方法是不切實際的。 – 2014-12-06 10:22:19

1

您在問題中發佈的鏈接實際上是一個bookmarklet的用例,正如我在之前的評論中簡要解釋的。

根據你的描述,我猜你誤解了它是如何被使用的。 如果我錯了,請糾正我,你可以跳到最後一部分。

小書籤是錨(<a>標籤),其hrefjavascript:僞協議開始。一個典型的書籤可能看起來像這樣:

<a href="javascript:alert(document.title)">Say my name!</a>

(請打開片段演示)當你點擊鏈接,它會提醒當前頁面的標題。但是,這是不是 surposed像這樣使用!您需要做的是,將其拖動到您的瀏覽器的書籤欄,另存爲書籤!然後,在您訪問的任何網頁上,單擊書籤。腳本將在THAT頁面的上下文中執行,並告訴你它的頁面標題。這是使用書籤的正確方法。

Bookmarklet的長度有限,因爲URL有限制(2,000+左右)。所以你不能在書籤上寫太多的內容。好消息,您可以在該書籤中插入<script>標籤。例如,這個書籤注入了jQuery你訪問網頁,如果你點擊它:

<a href="javascript:(function(){var s = document.createElement('script');s.src = 'http://code.jquery.com/jquery-2.1.1.min.js';document.body.appendChild(s);})()">Inject jQuery</a>

所以,如果您的應用程序超過了限制,你可以將它保存到一個JS文件,並通過注入書籤。

正如你告訴你的要求:針對老年人的服務,我認爲這是一個實際的解決方案。他們只保存一個書籤,並在需要時點擊。而已!

加上這種技術具有非常好的跨瀏覽器兼容性(甚至下個世紀)。還有一件事,IE6的URL長度有限500+(這對於腳本注入來說仍然是足夠的)。

最後但並非最不重要的,正如我前面所述,這可能也是潛在的XSS危險!所以請留意你的服務,不要讓你的JS文件被黑客入侵!


編輯:我上次錯過了一兩件事。除了undefined之外,不要在小書籤功能中返回任何內容。

看看這個例子。警告對話框後,頁面內容將返回值'Oops'更換,工作就像document.write('Oops')

<a href="javascript:(function(){alert('Oops');return 'Oops';})()">Oops</a>

所以更保證的方式是使用void關鍵字,這迫使函數調用返回undefined

<a href="javascript:void function(){alert('Oops');return 'Oops';}()">Oops</a>


編輯:還或者,更人性化的方法是開發瀏覽器擴展:CRX爲Chrome,XPI爲Firefox等如果擴展精心設計,只需要用戶安裝。另一方面,這顯然是昂貴的。

相關問題