2010-10-02 94 views
4

我通過注射JSONP一個腳本,並使用它來調用一個方法在我的web應用程序,像這樣:爲什麼我的頁面標題中沒有空格?

(function jsonp(src){ 
    var b = document.body; 
    var t = document.title; 
    var u = encodeURI(document.location.href); 

    var o = document.getElementById('srv-call'); 
    o && b.removeChild(o); 

    var s = document.createElement('script'); 
    s.id = 'srv-call'; 
    s.src = src + '?w=' + textSelection + '&cb=autoCall&u=' + u + '&pt=' + t + '&t=' + (new Date().getTime()); 
    b.appendChild(s); 
})('http://localhost:8888/wordmark/words/add_word'); 

不幸的是,我的document.title時得到填充非中斷空格。一個例子http請求是這樣的:

http://localhost:8888/wordmark/words/add_word?w=problems&cb=autoCall&u=http://www.boingboing.net/2010/10/01/kid-demonstrates-eng.html&pt=%E2%80%8BK%E2%80%8Bi%E2%80%8Bd%E2%80%8B%20%E2%80%8Bd%E2%80%8Be%E2%80%8Bm%E2%80%8Bo%E2%80%8Bn%E2%80%8Bs%E2%80%8Bt%E2%80%8Br%E2%80%8Ba%E2%80%8Bt%E2%80%8Be%E2%80%8Bs%E2%80%8B%20%E2%80%8BE%E2%80%8Bn%E2%80%8Bg%E2%80%8Bl%E2%80%8Bi%E2%80%8Bs%E2%80%8Bh%E2%80%8B%20%E2%80%8Bl%E2%80%8Ba%E2%80%8Bn%E2%80%8Bg%E2%80%8Bu%E2%80%8Ba%E2%80%8Bg%E2%80%8Be%E2%80%8B%20%E2%80%8Bi%E2%80%8Bn%E2%80%8B%20%E2%80%8B2%E2%80%8B4%E2%80%8B%20%E2%80%8Ba%E2%80%8Bc%E2%80%8Bc%E2%80%8Be%E2%80%8Bn%E2%80%8Bt%E2%80%8Bs%E2%80%8B%20%E2%80%8B-%E2%80%8B%20%E2%80%8BB%E2%80%8Bo%E2%80%8Bi%E2%80%8Bn%E2%80%8Bg%E2%80%8B%20%E2%80%8BB%E2%80%8Bo%E2%80%8Bi%E2%80%8Bn%E2%80%8Bg&t=1285982312594 

的腳本在頁面注入具有正確的SRC,但是HTTP請求是不正確。任何想法爲什麼這些被插入,如果我有任何方法來避免這種情況,除了通過正則表達式解析它們?

非常感謝您給予的幫助。

+0

爲什麼您將當前頁面標題傳遞給您指向的鏈接? – 2010-10-02 01:49:37

+0

嘿塞巴斯蒂安,我從另一個頁面獲得一個單詞並將它傳遞給我的Web應用程序,並將它插入到數據庫中。我需要能夠找出單詞來自哪裏 - 網址和網頁標題。 – 2010-10-02 02:58:54

回答

2

我剛剛意識到罪魁禍首。我很抱歉浪費大家的時間,但如果有其他人遇到這個問題,問題是SMRT Safari Extension會改變Safari的URL自動完成功能。 -1對我來說不禁用所有擴展並嘗試多個瀏覽器。謝謝,所有。

+1

+1,用於發佈回覆並記錄Google現在能夠回答的一個不明問題。 – 2010-10-02 03:31:56

1

您是否試過decodeURIComponent(t)而不僅僅是t

s.src = src + '?w=' + textSelection + '&cb=autoCall&u=' + u + '&pt=' + decodeURIComponent(t) + '&t=' + (new Date().getTime()); 
+0

不幸的是,即使使用decodeURIComponent,我也會在HTTP請求中獲得相同的URL。 – 2010-10-02 02:54:33

+0

這是因爲您在網址中放置了空格,並且它們正在被瀏覽器編碼。沒關係,你要求的服務器會自己解碼它,它會看到你的標題。 – 2010-10-02 03:01:23

+0

所以當我編碼這個時,我會期待'Kid%20demonstrates%20English%20language%20in%2024%20accents%20%20Boing%20Boing'這樣的東西,但它並沒有這樣做。它在每個**字符之間放置零寬度的空格。我誤解了嗎? – 2010-10-02 03:07:21

1

你需要做的就是把變量t掉在你行什麼,說

s.src = src + '?w=' + textSelection + '&cb=autoCall&u=' + u + '&pt=' + t + '&t=' + (new Date().getTime()); 

所以你的鏈接會是這個樣子,而不是:

http://localhost:8888/wordmark/words/add_word?w=problems&cb=autoCall&u=http://www.boingboing.net/2010/10/01/kid-demonstrates-eng.html&&t=1285982312594

和如果你必須有t變量,那麼插入它就像這樣

....(code before) '&pt=' + decodeURIComponent(t) + (code after)...... 

希望這會有所幫助。感謝

PK

+0

我確實需要將標題作爲查詢字符串傳遞,所以我不能簡單地將其刪除,而且我也沒有使用decodeURIComponent運行。任何其他想法?非常感謝你的幫助。 – 2010-10-02 02:56:30

0

那些不是非中斷空格,但zero-width spaces(U + 200B)。它們通常不可見,並且可能存在於原始標題中(用於文本包裝或任何其他原因)。

+0

感謝Piet的澄清。他們似乎在我嘗試的大多數頁面上都有,而我不知道爲什麼。這是有道理的,因爲它被作爲'\ u200b'插入到我的數據庫中。我可以選擇刪除嗎? – 2010-10-02 02:55:26

相關問題