Chrome and Safari XSLT using JavaScript

前端 未结 2 1481
心在旅途
心在旅途 2020-12-01 04:45

I have the following code that applies a XSLT style

Test.Xml.xslTransform = function(xml, xsl) {
    try {
        // code for IE
        if (window.ActiveX         


        
2条回答
  •  情话喂你
    2020-12-01 05:20

    If your XSLT is using xsl:include you might receive weird unexplainable errors but always with the same end result: your transformation failing.

    See this chromium bug report and please support it! http://code.google.com/p/chromium/issues/detail?id=8441

    The bug is actually in webkit though. For more info here's another link which goes into more detail why it doesn't work.

    The only way around this is to pre-process the stylesheet so that it injects the included stylesheets. Which is what a crossbrowser XSLT library like Sarissa will do for you automatically.

    If your looking for jQuery solution:
    http://plugins.jquery.com/project/Transform/ is a cross browser XSL plug-in. I've succesfully used this to get xsl:include working in the past without much hassle. You don't have to rewrite your xsl's this plugin will pre-process them for you. Definitely worth looking at as it's more lightweight then Sarissa.

    UPDATE:

    
    
     
      
    
    
    
    
    
    
    

    This test html page works both in Chrome/FireFox/IE.

    input.xml is just a simple xml file containing transform.xsl is the stripped down xsl you posted.

    EDIT

    It does however seem the $.transform has problems importing stylesheets from included files:

    Here's how to fix this:

    Locate

    var safariimportincludefix = function(xObj,rootConfig) {
    

    in jquery.transform.js and replace the entire function with this:

    var safariimportincludefix = function(xObj,rootConfig) {
        var vals = $.merge($.makeArray(xObj.getElementsByTagName("import")),$.makeArray(xObj.getElementsByTagName("include")));
    
        for(var x=0;x

    Now using the previously pasted test index.html use this for transform.xsl:

    
    
            
        
        
                
        
    
    

    And this for include.xsl

    
    
        
            

    Test

    With the previously posted fix in jquery.transform.js this will now insert the included

    Test

    on all the browsers.

    You can see it in action here: http://www.mpdreamz.nl/xsltest

提交回复
热议问题