UserScriptLoader.uc.jsの@requireが動かない

@requireでjQueryやunderscore.jsを読み込んでるユーザースクリプトを使うとき、requireディレクトリにキャッシュがない場合、saveURI()で失敗するようになってます。
調べるとFirefox 36以降でパラメータが増えてるのが原因っぽいです。

void saveURI(
  in nsIURI aURI,
  in nsISupports aCacheKey,
  in nsIURI aReferrer,
  in long aReferrerPolicy,
  in nsIInputStream aPostData,
  in string aExtraHeaders,
  in nsISupports aFile,
  in nsILoadContext aPrivacyContext
);

ということで wbp.saveURI(uri, null, null, null, null, aFile, null); となってる箇所の4番目(in long aReferrerPolicy)に null を追加すると保存されます。

	wbp.persistFlags = Ci.nsIWebBrowserPersist.PERSIST_FLAGS_BYPASS_CACHE;
	wbp.persistFlags |= Ci.nsIWebBrowserPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
	wbp.saveURI(uri, null, null, null, null, null, aFile, null);
	USL.debug("getContents: " + aURL);

同じようにメニューのSave Scriptをクリックしたときに保存できないのもsaveURIのパラメータが足りないからです。
こんな感じで null 追加。

			var loadContext = win.QueryInterface(Ci.nsIInterfaceRequestor)
				.getInterface(Ci.nsIWebNavigation)
				.QueryInterface(Ci.nsILoadContext);
			wbp.saveURI(uri, null, uri, null, null, null, fp.file, loadContext);

XPCOM廃止するとか言ってんのに今さら仕様変更すんなよ……。

コメントを残す

メールアドレスが公開されることはありません。