2015-07-22 61 views
0

我是一名程序員,我只是在Android studio中使用webview製作了一個簡單的webapp。除了一件事外,我有一切工作。我使用了LazarSoft的WebQR集。在我的webapp部分,我有一個名爲webqr.js(在下面找到)的文件,內容如下。當我使用WebQR掃描時,是否可以自動打開URL

我想要做的是在掃描QR碼時我想在同一瀏覽器窗口中自動打開結果(如果是URL)。現在它只顯示結果。

任何幫助將不勝感激。

var gCtx = null; 
 
var gCanvas = null; 
 
var c=0; 
 
var stype=0; 
 
var gUM=false; 
 
var webkit=false; 
 
var moz=false; 
 
var v=null; 
 

 
var imghtml='<div id="qrfile"><canvas id="out-canvas" width="320" height="240"></canvas>'+ 
 
    '<div id="imghelp">drag and drop a QRCode here'+ 
 
\t '<br>or select a file'+ 
 
\t '<input type="file" onchange="handleFiles(this.files)"/>'+ 
 
\t '</div>'+ 
 
'</div>'; 
 

 
var vidhtml = '<video id="v" autoplay></video>'; 
 

 
function dragenter(e) { 
 
    e.stopPropagation(); 
 
    e.preventDefault(); 
 
} 
 

 
function dragover(e) { 
 
    e.stopPropagation(); 
 
    e.preventDefault(); 
 
} 
 
function drop(e) { 
 
    e.stopPropagation(); 
 
    e.preventDefault(); 
 

 
    var dt = e.dataTransfer; 
 
    var files = dt.files; 
 
    if(files.length>0) 
 
    { 
 
\t handleFiles(files); 
 
    } 
 
    else 
 
    if(dt.getData('URL')) 
 
    { 
 
\t qrcode.decode(dt.getData('URL')); 
 
    } 
 
} 
 

 
function handleFiles(f) 
 
{ 
 
\t var o=[]; 
 
\t 
 
\t for(var i =0;i<f.length;i++) 
 
\t { 
 
     var reader = new FileReader(); 
 
     reader.onload = (function(theFile) { 
 
     return function(e) { 
 
      gCtx.clearRect(0, 0, gCanvas.width, gCanvas.height); 
 

 
\t \t \t qrcode.decode(e.target.result); 
 
     }; 
 
     })(f[i]); 
 
     reader.readAsDataURL(f[i]); \t 
 
    } 
 
} 
 

 
function initCanvas(w,h) 
 
{ 
 
    gCanvas = document.getElementById("qr-canvas"); 
 
    gCanvas.style.width = w + "px"; 
 
    gCanvas.style.height = h + "px"; 
 
    gCanvas.width = w; 
 
    gCanvas.height = h; 
 
    gCtx = gCanvas.getContext("2d"); 
 
    gCtx.clearRect(0, 0, w, h); 
 
} 
 

 

 
function captureToCanvas() { 
 
    if(stype!=1) 
 
     return; 
 
    if(gUM) 
 
    { 
 
     try{ 
 
      gCtx.drawImage(v,0,0); 
 
      try{ 
 
       qrcode.decode(); 
 
      } 
 
      catch(e){  
 
       console.log(e); 
 
       setTimeout(captureToCanvas, 500); 
 
      }; 
 
     } 
 
     catch(e){  
 
       console.log(e); 
 
       setTimeout(captureToCanvas, 500); 
 
     }; 
 
    } 
 
} 
 

 
function htmlEntities(str) { 
 
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); 
 
} 
 

 
function read(a) 
 
{ 
 
    var html="<br>"; 
 
    if(a.indexOf("http://") === 0 || a.indexOf("https://") === 0) 
 
     html+="<a target='_blank' href='"+a+"'>"+a+"</a><br>"; 
 
    html+="<b>"+htmlEntities(a)+"</b><br><br>"; 
 
    document.getElementById("result").innerHTML=html; 
 
} \t 
 

 
function isCanvasSupported(){ 
 
    var elem = document.createElement('canvas'); 
 
    return !!(elem.getContext && elem.getContext('2d')); 
 
} 
 
function success(stream) { 
 
    if(webkit) 
 
     v.src = window.webkitURL.createObjectURL(stream); 
 
    else 
 
    if(moz) 
 
    { 
 
     v.mozSrcObject = stream; 
 
     v.play(); 
 
    } 
 
    else 
 
     v.src = stream; 
 
    gUM=true; 
 
    setTimeout(captureToCanvas, 500); 
 
} 
 
\t \t 
 
function error(error) { 
 
    gUM=false; 
 
    return; 
 
} 
 

 
function load() 
 
{ 
 
\t if(isCanvasSupported() && window.File && window.FileReader) 
 
\t { 
 
\t \t initCanvas(800, 600); 
 
\t \t qrcode.callback = read; 
 
\t \t document.getElementById("mainbody").style.display="inline"; 
 
     setwebcam(); 
 
\t } 
 
\t else 
 
\t { 
 
\t \t document.getElementById("mainbody").style.display="inline"; 
 
\t \t document.getElementById("mainbody").innerHTML='<p id="mp1">QR code scanner for HTML5 capable browsers</p><br>'+ 
 
     '<br><p id="mp2">sorry your browser is not supported</p><br><br>'+ 
 
     '<p id="mp1">try <a href="http://www.mozilla.com/firefox"><img src="firefox.png"/></a> or <a href="http://chrome.google.com"><img src="chrome_logo.gif"/></a> or <a href="http://www.opera.com"><img src="Opera-logo.png"/></a></p>'; 
 
\t } 
 
} 
 

 
function setwebcam() 
 
{ 
 
\t document.getElementById("result").innerHTML="- scanning -"; 
 
    if(stype==1) 
 
    { 
 
     setTimeout(captureToCanvas, 500);  
 
     return; 
 
    } 
 
    var n=navigator; 
 
    document.getElementById("outdiv").innerHTML = vidhtml; 
 
    v=document.getElementById("v"); 
 

 
    if(n.getUserMedia) 
 
     n.getUserMedia({video: true, audio: false}, success, error); 
 
    else 
 
    if(n.webkitGetUserMedia) 
 
    { 
 
     webkit=true; 
 
     n.webkitGetUserMedia({video:true, audio: false}, success, error); 
 
    } 
 
    else 
 
    if(n.mozGetUserMedia) 
 
    { 
 
     moz=true; 
 
     n.mozGetUserMedia({video: true, audio: false}, success, error); 
 
    } 
 

 
    //document.getElementById("qrimg").src="qrimg2.png"; 
 
    //document.getElementById("webcamimg").src="webcam.png"; 
 
    document.getElementById("qrimg").style.opacity=0.2; 
 
    document.getElementById("webcamimg").style.opacity=1.0; 
 

 
    stype=1; 
 
    setTimeout(captureToCanvas, 500); 
 
} 
 
function setimg() 
 
{ 
 
\t document.getElementById("result").innerHTML=""; 
 
    if(stype==2) 
 
     return; 
 
    document.getElementById("outdiv").innerHTML = imghtml; 
 
    //document.getElementById("qrimg").src="qrimg.png"; 
 
    //document.getElementById("webcamimg").src="webcam2.png"; 
 
    document.getElementById("qrimg").style.opacity=1.0; 
 
    document.getElementById("webcamimg").style.opacity=0.2; 
 
    var qrfile = document.getElementById("qrfile"); 
 
    qrfile.addEventListener("dragenter", dragenter, false); 
 
    qrfile.addEventListener("dragover", dragover, false); 
 
    qrfile.addEventListener("drop", drop, false); 
 
    stype=2; 
 
}

回答

0

歡迎的JavaScript,可能你長着它的多種用途繁榮!

由於您是JavaScript的新手,您可能不知道其瀏覽器API,但不要害怕!

你所尋找的是window.open

它的語法很簡單:

window.open("http://example.com") 

所以,當你從你的QR解碼器獲得url,你所要做的就是window.open的URL,中提琴,窗口將出現在一個新標籤!

現在如果你想在同一瀏覽器窗口中打開,然後你想使用

window.location.replace("http://example.com") 

這將重定向,而不是一個新的相同標籤,!

在程序中實現這一點,看看這個read功能:

function read(a) { 
    // If it's a URL, open in here 
    if(a.indexOf("http://") === 0 || a.indexOf("https://") === 0) 
    window.location.replace(a) 
} 

希望我能幫助!

+0

感謝您的反饋!我想我明白你的意思。只有我不明白如何在webQR.js中實現它?我是否需要將其添加到:function read(a)? – Mikeyb070

+0

好吧,我會帶你通過編輯 – MayorMonty

+0

執行感謝,這沒有把戲:) – Mikeyb070

相關問題