我正在與XSLT 1.0一起瀏覽大量項目列表並生成用於訪問有關這些項目的信息的鏈接。XSLT - 自動打開HREF
我已經能夠成功地爲每個項目創建HREFs
,點擊後,打開一個新窗口並帶我到正確的鏈接並顯示正確的信息。
雖然這是朝着正確方向邁出的一大步,但有一件事我一直無法弄清楚:如何處理XSLT時自動打開鏈接?
下面是一個例子XML文檔:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<example>
<number>1</number>
</example>
<example>
<number>2</number>
</example>
<example>
<number>3</number>
</example>
</document>
這裏是我當前XSL代碼:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:oldxsl="http://www.w3.org/TR/WD-xsl"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:local="#local-functions"
xmlns:date="http://exslt.org/dates-and-times">
<xsl:template match="/">
<html>
<xsl:for-each select="//example">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="./number"/><br/>
</xsl:element>
</xsl:for-each>
</html>
</xsl:template>
</xsl:stylesheet>
注 - 在例如上面的鏈接並不意味着以任何方式冒犯,這只是一個簡短的鏈接,可以讓我展示實際發生的事情。 (是的,我試圖尋找解決這個問題。)
再次,這是工作,因爲我期望它。當我點擊任何產生的鏈接時,我就會被帶到我應該在的地方。
我現在想要做的就是在頁面加載後自動打開每個鏈接。 (在這種情況下,我應該看到3個新窗口不必點擊任何鏈接。)如果可能,請告訴我如何完成此操作。
謝謝!
更新1 - 如果這是可以解決的,就也有可能打開每個鏈接的打印對話框?如果是這樣,怎麼樣?
UPDATE 2 - 我確實嘗試用Java來解決這個問題,但是我沒有成功。 (雖然我必須誠實地說,我對Java並不是很熟悉,更不用說在XSLT樣式表中使用它了。)下面是我嘗試的,這是對上述代碼的修改。它生成了一行像鏈接一樣下劃線的文本,但是當點擊時,我收到一個錯誤。
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>#</xsl:text>
</xsl:attribute>
<xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="./number"/><br/>
</xsl:element>
更新3 - 我能得到的Java在新窗口中打開一個新的鏈接,但這個鏈接是靜態的。它不隨每個項目而變化。此外,它只打開一個窗口,即使有三個進程。下面的代碼我有:
<script type="text/javascript">
function load()
{
window.open("http://www.google.com");
}
</script>
<body onload="load()">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>#</xsl:text>
</xsl:attribute>
<xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="./number"/><br/>
</xsl:element>
</body>
UPDATE 4 - 我在進步!通過以下代碼,我可以打開一個新窗口。我現在唯一的問題是,只有一個窗口打開,我應該看到3.(打開的窗口是最後一個/最後一個鏈接,在這種情況下,「示例3」)。這使我相信腳本本身正在工作,並且我現在只需要在每次xsl:for-each
循環時都找出如何調用腳本。)建議?
<xsl:for-each select="//example">
<script type="text/javascript">
function load()
{
xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>
}
</script>
<body onload="load()">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>#</xsl:text>
</xsl:attribute>
<xsl:attribute name="onload"><xsl:text>javascript:window.open('http://lmgtfy</xsl:text><xsl:text>.com/?q=Example+</xsl:text><xsl:value-of select="./number"/><xsl:text>','displayWindow','menubar=no,toolbar=no,resizable=yes)</xsl:text>
</xsl:attribute>
<xsl:attribute name="target">_blank</xsl:attribute>
<xsl:value-of select="./number"/><br/>
</xsl:element>
</body>
打開鏈接應該基本上可以使用一點點JavaScript。但可能會被視爲彈出並被阻止。 –
我這樣做的最好方法是什麼? (我用JS試過的東西並不成功,幾乎像JS一樣不被識別?) – Simcik
@ hr_117我試圖使用Java,但沒有成功。我只是比較熟悉Javascript,並且我沒有在XSLT樣式表中使用Java的經驗。任何幫助將不勝感激。我添加了我想要的原始帖子(請參閱更新2)。 – Simcik