その場で特定の XML ドキュメントに XSLT 変換を適用する必要がある Chrome 拡張機能を作成しています。テストのために、次の XML および XSL ファイルを使用します。
XML:
<?xml version="1.0" encoding="utf-8" ?>
<WebServiceMessage>
<status>timeout</status>
<message>Nameserver%2520not%2520registered.</message>
<stepName>Finish</stepName>
<stepNumber>11</stepNumber>
<maxStepNumber>11</maxStepNumber>
<percent>100</percent>
<session>2fc0f139b88a800151e5f21b9d747919</session>
</WebServiceMessage>
XSL:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><head></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="*">
<xsl:for-each select="*">
<p><b><xsl:value-of select ="name(.)"/></b>:
<span><xsl:attribute name="id"><xsl:value-of select ="name(.)"/></xsl:attribute><xsl:value-of select="."/></span></p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
変換は、テスト XML ファイル自体の内部でリンクされている場合、つまり次の方法で正常に機能します。
<?xml-stylesheet type="text/xsl" href="message.xsl"?>
拡張機能は、同じ xsl リンクを XML ファイルに挿入する必要があります。
マニフェスト.json:
{
"permissions": ["tabs", "<all_urls>"],
"content_scripts":
[
{
"matches": ["<all_urls>"],
"js" : ["contentscript.js"]
}
],
"web_accessible_resources":
[
"message.xsl"
],
"manifest_version": 2
}
contentscript.js:
(function()
{
if(document.xmlVersion != null)
{
var e = document.createProcessingInstruction(
"xml-stylesheet",
"type='text/xsl' href='" + chrome.extension.getURL("message.xsl") + "'");
document.insertBefore(e, document.firstChild);
}
})();
問題
Chrome は次のエラーをコンソールに出力します。
chrome-extension://ladfinoepkgipbeooknnklpakoknohjh/message.xsl
URLのフレームから安全でない URL をロードしようとしていますhttp://localhost/out.xml
。ドメイン、プロトコル、およびポートが一致する必要があります。
これを修正する方法は?Chrome のバグのように見える同様のエラーに関連するレポートをインターネットでいくつか見ました。
xsl ファイルも Web サーバーに配置し、スタイルシート リンクを Web サーバーに変更しました。それでも同じエラー:
http://localhost/message.xsl
URLのフレームから安全でない URL をロードしようとしていますhttp://localhost/out.xml
。ドメイン、プロトコル、およびポートが一致する必要があります。
どうやらドメイン、プロトコル、およびポートは一致しています。