Permalink
Browse files

Add the 'aBaseURL' argument to GM_safeHTMLParser, which allows script…

… authors to specify a base URL to be used when resolving partials. Closes #17

(cherry picked from commit ee9ff4801c50abedfd1ad61a6a6243884261e363)
  • Loading branch information...
1 parent 17cb95a commit b956baea523e21cde8fcde9165ad446e7fe51160 @supahgreg supahgreg committed Sep 16, 2012
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Keine Resource mit dem Namen
error.api.noSecondArgValue=Zweites Argument nicht spezifiziert: Value
error.api.reqURL=Ungültige URL
error.api.reqURL.scheme=Verbotenes Schema (Protokoll) in URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Scriptish Zugriffsverletzung: unsafeWindow darf nicht aufrufen werden
error.charset=Ungültige Zeichenkodierung angegeben.
error.dependency.loading=Fehler beim Laden von Anhängigkeit
@@ -14,6 +14,7 @@ error.api.noResourceWithName=No resource with name
error.api.noSecondArgValue=Second argument not specified: Value
error.api.reqURL=Invalid URL
error.api.reqURL.scheme=Disallowed scheme in URL
+error.api.safeHTMLParser.url=The "URL" argument to GM_safeHTMLParser could not be parsed
error.api.unsafeAccess=Scriptish access violation: unsafeWindow cannot call
error.charset=Invalid charset specified.
error.dependency.loading=Error loading dependency
@@ -14,6 +14,7 @@ error.api.noResourceWithName=No hay recursos con ese nombre
error.api.noSecondArgValue=Segundo argumento no especificado: Valor
error.api.reqURL=URL no válido
error.api.reqURL.scheme=Esquema no permitido en URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Violación de acceso de Scriptish: unsafeWindow no puede invocar
error.charset=El conjunto de caracteres especificado no es válido.
error.dependency.loading=Error al cargar dependencia
@@ -14,6 +14,7 @@ error.api.noResourceWithName=לא קיים משאב בעל שם
error.api.noSecondArgValue=לא צוין ערך שני: ערך
error.api.reqURL=כתובת URL לא חוקית
error.api.reqURL.scheme=ערכה לא מורשת בכתובת URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=הפרת גישה של Scriptish: אין אפשרות לקרוא unsafeWindow
error.charset=צוין קידוד לא חוקי.
error.dependency.loading=שגיאה בטעינת תלות
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Nincs erőforrás ezen a néven:
error.api.noSecondArgValue=Második argumentum nincs meghatározva: Érték
error.api.reqURL=Érvénytelen URL
error.api.reqURL.scheme=Az URL formátuma érvénytelen
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Scriptish hozzáférési hiba: unsafeWindow nem képes hívni
error.charset=Érvénytelen karakterosztály.
error.dependency.loading=Hiba a függőség betöltése során
@@ -14,6 +14,7 @@ error.api.noResourceWithName=名前付きリソースが見つかりません
error.api.noSecondArgValue=2番目の引数が指定されていません:Value
error.api.reqURL=不正な URL です
error.api.reqURL.scheme=URL 内で許されないスキーム(scheme)です
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Scriptish アクセス違反: unsafeWindow は以下を呼び出すことが出来ません
error.charset=不正な文字セットが指定されました
error.dependency.loading=依存関係の読み込みでエラーが発生しました
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Brak źródeł z nazwą
error.api.noSecondArgValue=Drugi argument nie został określony: Wartość
error.api.reqURL=Błędny URL
error.api.reqURL.scheme=Niedozwolony schemat URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Naruszenie zasad dostępu Scriptish: nie można wywołać niebezpiecznego Okna
error.charset=Określony zestaw znaków jest nieprawidłowy.
error.dependency.loading=Błąd ładowania zależności
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Nenhum recurso com o nome
error.api.noSecondArgValue=Segundo argumento não especificado: Valor
error.api.reqURL=Endereço inválido
error.api.reqURL.scheme=Esquema não permitido em URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Violação de acesso do Scriptish: unsafeWindow não pode chamar
error.charset=O conjunto de caracteres especificado é inválido.
error.dependency.loading=Erro carregando dependência
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Нет ресурса с таким именем
error.api.noSecondArgValue=Следующий аргумент не указан: Значение
error.api.reqURL=Неверный URL
error.api.reqURL.scheme=Схема URL запрещена
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Нарушение доступа Scriptish: из unsafeWindow не позволено работать с
error.charset=Неверная кодировка.
error.dependency.loading=Не удалось загрузить зависимость
@@ -14,6 +14,7 @@ error.api.noResourceWithName=Det finns ingen resurs med namnet
error.api.noSecondArgValue=Det andra argumentet har inte angivits: Värde
error.api.reqURL=Ogiltig URL
error.api.reqURL.scheme=Otillåtet schema i URL
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Åtkomstfel i Scriptish: unsafeWindow kan inte anropa
error.charset=Ogiltig teckenuppsättning angavs.
error.dependency.loading=Fel vid inläsning av beroende
@@ -14,6 +14,7 @@ error.api.noResourceWithName=没有该名称的资源
error.api.noSecondArgValue=第二个参数未指定:值
error.api.reqURL=无效的 URL
error.api.reqURL.scheme=不允许在 URL 中出现 scheme
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Scriptish 访问冲突:unsafeWindow 无法调用
error.charset=指定的字符集无效。
error.dependency.loading=加载依赖文件时发生错误
@@ -14,6 +14,7 @@ error.api.noResourceWithName=沒有該名稱的資源
error.api.noSecondArgValue=第二個參數未指定:值
error.api.reqURL=無效的網址
error.api.reqURL.scheme=網址中有不支援的協定
+error.api.safeHTMLParser.url=
error.api.unsafeAccess=Scriptish 存取失敗: unsafeWindow 無法呼叫
error.charset=指定的字元編碼無效。
error.dependency.loading=載入附屬檔案時發生錯誤
View
@@ -83,12 +83,38 @@ function GM_API(options) {
return new GM_Resources(aScript);
});
- this.GM_safeHTMLParser = function GM_safeHTMLParser(aHTMLStr) {
+ this.GM_safeHTMLParser = function GM_safeHTMLParser(aHTMLStr, aBaseURL) {
if (!GM_apiLeakCheck("GM_safeHTMLParser")) return;
+
let doc = document.implementation.createDocument(NS_XHTML, "html", null);
let body = document.createElementNS(NS_XHTML, "body");
+ let baseURI;
+ let frag;
+
doc.documentElement.appendChild(body);
- body.appendChild(Services.suhtml.parseFragment(aHTMLStr, false, null, body));
+
+ if ("undefined" !== typeof aBaseURL) {
+ try {
+ baseURI = NetUtil.newURI(aBaseURL);
+ }
+ catch(e) {
+ throw new Error(Scriptish_stringBundle("error.api.safeHTMLParser.url"));
+ }
+ }
+ else {
+ baseURI = null;
+ }
+
+ // Try to use the newer nsIParserUtils (Gecko >= 14)
+ if ("pu" in Services) {
+ frag = Services.pu.parseFragment(aHTMLStr, 0, false, baseURI, body);
+ }
+ // Otherwise fall back to deprecated nsIScriptableUnescapeHTML
+ else {
+ frag = Services.suhtml.parseFragment(aHTMLStr, false, baseURI, body);
+ }
+
+ body.appendChild(frag);
return doc;
}
@@ -87,6 +87,11 @@ if (e10s) {
"nsIChromeFrameMessageManager");
}
+if (Cc["@mozilla.org/parserutils;1"]) {
+ lazyService(
+ Services, "pu", "@mozilla.org/parserutils;1", "nsIParserUtils");
+}
+
lazyService(
Services, "sis", "@mozilla.org/scriptableinputstream;1",
"nsIScriptableInputStream");

0 comments on commit b956bae

Please sign in to comment.