【问题标题】:Opening new window with embedded image打开带有嵌入图像的新窗口
【发布时间】:2015-09-18 05:14:16
【问题描述】:

我正在尝试打开一个新窗口,当在原始页面上单击图像时,该窗口会显示所单击嵌入图像的放大版本。这可能吗?

我已经尝试过类似以下的方法(我现在没有实际的代码,但希望您能看到我正在尝试做的事情),但是打开的窗口没有图像,只是一个空白页。

嵌入的图像数据也只是一个示例。大图和小图在实际情况下实际上是不同的。

<a href="data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNg YPj/gAwXEQA7">
<img onclick="var largeImgSrc=parentNode.href;
window.open(largeImgSrc,"width=400,height=300");
return false;" src="data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"></img>
</a>

所以,我将较大的图像源存储在锚点的 href 属性中。单击图像时,应发送onclick 事件并执行javascript,打开一个包含图像的新窗口。

由于它打开了窗口但没有显示任何内容,我认为使用数据源 uri 而不是指向实际图像的链接有问题。

【问题讨论】:

  • 如果 javascript 在单独的部分中(而不是与您的 HTML 内联)会更易读 - 您可以这样做吗?
  • 我还建议不要在您的属性及其值周围放置空格。其他程序员的可读性受到损害。

标签: javascript html


【解决方案1】:

在您的代码中,您有以下内容:

onclick="var largeImgSrc=parentNode.href; window.open(largeImgSrc,".....

您在调用window.open(largeImgSrc," &lt;- this one 时的双引号将关闭由onclick=" &lt;- this one 开始的双引号,基本上使JS 代码的其余部分不完整。

您的窗口打开了,但函数格式不正确,所以事情很快就失败了(您甚至可能因此遇到控制台错误 - 如果您还没有,我会感到惊讶)。

当所有内容都像您在示例代码中所做的那样内联时,这种情况很难检测到。

因此,为了可读性,我将 JS 分解为一个单独的函数,将 onclick 添加到 href 而不是图像

注意:下面的代码是沙盒的,不会打开新窗口。您需要在自己的页面/代码上尝试此操作

function openImg() {
  var largeImgSrc = "data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"

  window.open(largeImgSrc, "title here", "width=400, height=300");
  return false;

}
<a href="#" onclick="openImg()">
  <img src="data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNg YPj/gAwXEQA7" />
</a>

【讨论】:

    【解决方案2】:

    单词“width”之前的第一个引号" 关闭了onclick 属性,从而破坏了您的功能。您可以清理它或创建一个函数以通用方式处理这些问题。

    <a href = "data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
    /ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
    V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNg YPj/gAwXEQA7">
    <img onclick="fruitloop(this)" src = "data:image/png;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
    /ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
    V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"></img>
    </a>
    <script>
        function fruitloop(that){
            var largeImgSrc = that.parentNode.href;
            console.log(largeImgSrc)
            window.open(largeImgSrc,"width = 400, height = 300");
            return false;
    
        }
    </script>
    

    【讨论】:

    • 对 OP 的建议以及完美的答案:由于hrefsrc 属性中的 URL 相同,也许只需执行 var largeImgScr = that.src; 也可以解决问题(并且防止复制 dataURI 两次并使代码膨胀)。
    • 真实图像不等价 - 我应该在我的 OP 中说明这一点,对不起!除了重构以使其更清晰易读之外,我也看不出这与我的原始帖子有何不同。
    • @PaulGothard 您的原始帖子包含错误-此答案与您的帖子不是一对一的等效(有关更多详细信息,请参阅我的答案)
    • 好的,有意更新。实际上,再看一遍后,您可以在 href 上使用 target :) &lt;a target="_blank" href = "data:image...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多