ie8下以下代码无法运行,请问是怎么回事?

解决方案 »

  1.   

       <!--
            var img=null;
            function chkimg(inp)
            {
              if(img)img.removeNode(true);
              img=document.createElement("img");
              img.style.position="absolute";
              img.style.visibility="hidden";
              img.attachEvent("onreadystatechange",isimg);
              img.attachEvent("onerror",notimg);
              img.src=inp;
            }
    function notimg()
    {
    alert("您插入的不是图片,请重新选择插入");
    }
    function isimg()
    {
    str = document.all.F1.value;
    numD = str.lastIndexOf(".");
    numB = str.lastIndexOf("\\");
                fileType = str.substr(numD+1);
                //fileName = str.substring(numB+1,numD);
                fileName = str.substr(numB+1);
                document.all.pic_name.value=fileName;
                document.all.pic_type.value=fileType;
                
    show.insertAdjacentElement("BeforeEnd",img);

    document.all.pic_width.value=img.offsetWidth;
    document.all.pic_height.value=img.offsetHeight;
                 //picwidth.innerHTML =  img.offsetWidth; 


    }       
         //-->
    pic_name等input都无法赋值
      

  2.   

    try
    document.getElementById 赋值
      

  3.   

     img.attachEvent("onreadystatechange",isimg);
      img.attachEvent("onerror",notimg);
    感觉这里有问题,高手过来看看啊
      

  4.   

    你先试试在站点外运行一下这个页面,应该是没有问题的,但你把他放到web环境中在运行就不行了
    在环境中运行的时候是访问不到图片的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
        <script language="javascript">
            var img = null;
            function chkimg(inp)
            {
              //  if (img) img.removeNode(true);
                img = document.createElement("img");
                  img.attachEvent("onreadystatechange",getFileName);
       img.attachEvent("onerror",isnotimg);
                img.style.position = "absolute"; 
                 img.src = (document.getElementById("File1").value);
                img.style.visibility = "hidden";  
                  
             
            }
            function isnotimg()
    {
    alert("图片错误");
    }
            function getFileName()
            {
                 
                var filename = (document.getElementById("File1").value);           
                numD = filename.lastIndexOf(".");
                numB = filename.lastIndexOf("\\");
                fileType = filename.substr(numD + 1);
                //fileName = str.substring(numB+1,numD);
                fileName = filename.substr(numB + 1);
                document.getElementById("txtFileName").value = fileName;
                document.getElementById("txtFileType").value = fileType;
            }
        </script>
    </head>
    <body>
        <input id="File1" type="file" />
        <input type="button" value="Test" onclick="chkimg();" />
        <hr />
        <input type="text" id="txtFileName" />
        <input type="text" id="txtFileType" />
    </body>
    </html>
      

  5.   

    这个是由于IE8的安全设置造成的,可以修改ie --》工具--》internet选项--》安全--》自定义级别中设置
    将“其他”中的"将文件上传到服务器时包含本地目录路径"设为启用就可以了下面的是兼容ie和FF的图片预览,参考下
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">       
    <html xmlns="http://www.w3.org/1999/xhtml">       
    <head>       
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />       
    <title>Firefox3,IE6,IE7,IE8上传图片预览</title>       
    <mce:style type="text/css"><!--  
          
    #preview_wrapper{        
        display:inline-block;        
        width:300px;        
        height:300px;        
        background-color:#CCC;        
    }        
    #preview_fake{ /* 该对象用户在IE下显示预览图片 */        
        filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);        
    }        
    #preview_size_fake{ /* 该对象只用来在IE下获得图片的原始尺寸,无其它用途 */        
        filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);          
        visibility:hidden;        
    }        
    #preview{ /* 该对象用户在FF下显示预览图片 */        
        width:300px;        
        height:300px;        
    }        
    --></mce:style><style type="text/css" mce_bogus="1">       
    #preview_wrapper{        
        display:inline-block;        
        width:300px;        
        height:300px;        
        background-color:#CCC;        
    }        
    #preview_fake{ /* 该对象用户在IE下显示预览图片 */        
        filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);        
    }        
    #preview_size_fake{ /* 该对象只用来在IE下获得图片的原始尺寸,无其它用途 */        
        filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);          
        visibility:hidden;        
    }        
    #preview{ /* 该对象用户在FF下显示预览图片 */        
        width:300px;        
        height:300px;        
    }      </style>       
           
    <script type="text/javascript">
           
    function onUploadImgChange(sender){        
        if( !sender.value.match( /.jpg|.gif|.png|.bmp/i ) ){        
            alert('图片格式无效!');        
            return false;        
        }        
                
        var objPreview = document.getElementById( 'preview' );        
        var objPreviewFake = document.getElementById( 'preview_fake' );        
        var objPreviewSizeFake = document.getElementById( 'preview_size_fake' );        
                
        if( sender.files &&  sender.files[0] ){        
            objPreview.style.display = 'block';        
            objPreview.style.width = 'auto';        
            objPreview.style.height = 'auto';        
                    
            // Firefox 因安全性问题已无法直接通过 input[file].value 获取完整的文件路径        
            objPreview.src = sender.files[0].getAsDataURL();            
        }else if( objPreviewFake.filters ){         
            // IE7,IE8 在设置本地图片地址为 img.src 时出现莫名其妙的后果        
            //(相同环境有时能显示,有时不显示),因此只能用滤镜来解决        
                    
            // IE7, IE8因安全性问题已无法直接通过 input[file].value 获取完整的文件路径        
            sender.select();        
            var imgSrc = document.selection.createRange().text;        
                    
            objPreviewFake.filters.item(        
                'DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;        
            objPreviewSizeFake.filters.item(        
                'DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;        
                    
            autoSizePreview( objPreviewFake,         
                objPreviewSizeFake.offsetWidth, objPreviewSizeFake.offsetHeight );        
            objPreview.style.display = 'none';        
        }        
    }        
           
    function onPreviewLoad(sender){        
        autoSizePreview( sender, sender.offsetWidth, sender.offsetHeight );        
    }        
           
    function autoSizePreview( objPre, originalWidth, originalHeight ){        
        var zoomParam = clacImgZoomParam( 300, 300, originalWidth, originalHeight );        
        objPre.style.width = zoomParam.width + 'px';        
        objPre.style.height = zoomParam.height + 'px';        
        objPre.style.marginTop = zoomParam.top + 'px';        
        objPre.style.marginLeft = zoomParam.left + 'px';        
    }        
           
    function clacImgZoomParam( maxWidth, maxHeight, width, height ){        
        var param = { width:width, height:height, top:0, left:0 };        
                
        if( width>maxWidth || height>maxHeight ){        
            rateWidth = width / maxWidth;        
            rateHeight = height / maxHeight;        
                    
            if( rateWidth > rateHeight ){        
                param.width =  maxWidth;        
                param.height = height / rateWidth;        
            }else{        
                param.width = width / rateHeight;        
                param.height = maxHeight;        
            }        
        }        
                
        param.left = (maxWidth - param.width) / 2;        
        param.top = (maxHeight - param.height) / 2;        
                
        return param;        
    }        
    </script>       
           
    </head>       
           
    <body>       
        <div id="preview_wrapper">       
            <div id="preview_fake">       
                <img id="preview" onload="onPreviewLoad(this)"/>       
            </div>       
        </div>       
        <br/>       
        <input id="upload_img" type="file" onchange="onUploadImgChange(this)"/>       
        <br/>       
        <img id="preview_size_fake"/>       
    </body>       
    </html>       
      

  6.   

    上面的代码如果加上这2行,在本地可以显示图片,
    //img.style.visibility = "hidden";  
    document.body.appendChild(img);但是在web容器中仍无法显示图片,发现图片的src引用的是类似这样的值file:///C:/temp/img/gongshang_logos.gif
    这是个本地文件协议,在WEB容器中无法解析这个地址具体原因就不知道了,等待高手解答
      

  7.   

    发现好像在WEB容器中运行的程序是不能访问工程路径外的资源的(包括客户端资源),我觉得如果想实现图片预览的话是否可以先将图片上传到服务器的临时目录上然后再预览呢
      

  8.   

    这个是由于IE8的安全设置造成的,可以修改ie --》工具--》internet选项--》安全--》自定义级别中设置
    将“其他”中的"将文件上传到服务器时包含本地目录路径"设为启用就可以了-----------------------设置了以后好像还是没有作用啊
      

  9.   


    请问这个代码怎么将图片的文件名、类型、大小设置到相应的input上呢?
      

  10.   

    你应该先读下代码,然后自己尝试一下   if( !sender.value.match( /.jpg|.gif|.png|.bmp/i ) ){        
            alert('图片格式无效!');        
            return false;
        }
       var numD = (sender.value);
      numD = filename.lastIndexOf(".");
                numB = filename.lastIndexOf("\\");
                fileType = filename.substr(numD + 1);
                //fileName = str.substring(numB+1,numD);
                fileName = filename.substr(numB + 1);
                document.getElementById("txtFileName").value = fileName;
                document.getElementById("txtFileType").value = fileType;
      

  11.   

    我尝试了,无法获取图形的实际大小啊!
    document.getElementById("t1").value = sender.style.Width;
        document.getElementById("t2").value = sender.style.Height;
      

  12.   

    sender.offsetWidth和sender.offsetHeight得到的总是一样的数值226,20
      

  13.   

    获取尺寸会有点问题了,理论上是不允许读取本地文件的
    修改了一下上面的文件,可以读大小了
          
    <script type="text/javascript">
           
    function onUploadImgChange(sender){        
        if( !sender.value.match( /.jpg|.gif|.png|.bmp/i ) ){        
            alert('图片格式无效!');        
            return false;
        }
       // alert(sender.value);
        var objPreview = document.getElementById( 'preview' );        
        var objPreviewFake = document.getElementById( 'preview_fake' );        
        var objPreviewSizeFake = document.getElementById( 'preview_size_fake' );        
                
        if( sender.files &&  sender.files[0] ){        
            objPreview.style.display = 'block';        
            objPreview.style.width = 'auto';        
            objPreview.style.height = 'auto';        
                    
            // Firefox 因安全性问题已无法直接通过 input[file].value 获取完整的文件路径
            objPreview.src = sender.files[0].getAsDataURL();
                      
        }else if( objPreviewFake.filters ){         
            // IE7,IE8 在设置本地图片地址为 img.src 时出现莫名其妙的后果        
            //(相同环境有时能显示,有时不显示),因此只能用滤镜来解决        
                    
            // IE7, IE8因安全性问题已无法直接通过 input[file].value 获取完整的文件路径        
            sender.select();        
            var imgSrc = document.selection.createRange().text;
          //  alert(imgSrc);
            objPreviewFake.filters.item(        
                'DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;        
            objPreviewSizeFake.filters.item(        
                'DXImageTransform.Microsoft.AlphaImageLoader').src = imgSrc;        alert(objPreviewSizeFake.offsetHeight + ":" + objPreviewSizeFake.offsetWidth);
           autoSizePreview( objPreviewFake,         
                objPreviewSizeFake.offsetWidth, objPreviewSizeFake.offsetHeight );        
            objPreview.style.display = 'none';
        }    
    }        
            
           
    function autoSizePreview( objPre, originalWidth, originalHeight ){         
        objPre.style.width = originalWidth + 'px';
        objPre.style.height = originalHeight + 'px';
        objPre.style.marginTop = 0 + 'px';
        objPre.style.marginLeft = 0 + 'px';
    }        
         
    </script>       
           
    </head>       
           
    <body>       
        <div id="preview_wrapper">       
            <div id="preview_fake">       
                <img id="preview" onload ="alert(this.offsetWidth+ ':'+ this.offsetHeight);"/>       
            </div>       
        </div> 
        <div style="background-color:#999999">     
        <fieldset style="background-color:#6ba5c0">
        <legend >test</legend>
        </fieldset> 
        d
        d
        d
        d
        </div>
        <br/>       
        <input id="upload_img" type="file" onchange="onUploadImgChange(this)"/>       
        <br/>       
        <img id="preview_size_fake" />       
    </body>       
    </html>       
      

  14.   

    我在IE8 和 FF3.6下走了,没有问题,google下没有大小