javascript - 如何将 window.onload 中的函数输出传递给另一个 javascript 文件?

标签 javascript html scope global-variables imageurl

在第一页上有一个按钮,单击该按钮会打开第二页,您可以在其中在 Canvas 上绘制图片。完成上述图片的绘制后,您可以单击发布按钮,将 Canvas 转换为图像 URL 并关闭第二页窗口。

然后我希望图像自动显示在原始首页上。

问题是,我似乎无法将新图像 URL 输出传回第一页。这两个脚本都包含在 window.onload 中,它似乎不允许我全局访问变量或函数。我试过将 pubNow 函数放在 window.onload 之外,将 Canvas 转换为图像,但将代码放在范围之外,并且几个变量返回未定义。我怎样才能传递这个变量?

这是下面的代码。请只使用 Vanilla Javascript。

注意:每个页面都有自己的 HTML、CSS 和 JS 文件。我想将一个函数的输出从一个 JS 文件传递​​到另一个 JS 文件。

//HTML
<script src= 'file1.js'></script>
<script src= 'file2.js'></script>
//JS File1
window.onload = function(){
//code that needs to use output of pubNow() after publish button is clicked on second page
}
//JS File2
const canvas = document.getElementsByClassName('draw');
const draw = canvas[0].getContext('2d');
//code that allows user to draw
const publish = document.getElementsByClassName('publish');
publish[0].addEventListener('mousedown', pubNow);
publish[0].addEventListener('mousedown', close);
window.onload = function () {
function pubNow (canvas){
const image = new image();
image.src = canvas.toDataURL('image/png');
return image;
}
function close (){
    window.close();
}
}

最佳答案

您可以使用 postMessage 来做到这一点:

index.html

<button id="open-btn">Open the canvas page</button>
<img id="img" src="" alt="" />

<script>
  document.getElementById("open-btn").addEventListener("click", openCanvasPage);

  window.addEventListener("message", function(msg) {
    document.getElementById("img").setAttribute("src", msg.data);
  });

  function openCanvasPage() {
    open("draw.html");
  }
</script>

canvas.html

<canvas id="canvas" width="500" height="500"></canvas>
<button id="publish-btn">Publish</button>

<script>
  document.getElementById("publish-btn").addEventListener("click", publishDrawing);

  function publishDrawing() {
    // `opener` is the window that spawned this one
    opener.postMessage(canvas.toDataURL(), "*");
    close();
  }
</script>

Demo

关于javascript - 如何将 window.onload 中的函数输出传递给另一个 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53906417/

相关文章:

javascript - 文档就绪函数内的全局范围

javascript - Backbone.js 访问触发 View 事件的元素

javascript - 在棋盘上添加数字和字母

javascript - 在 iOS 上切换 HTML 视频可见性

Php 类型/css 文件无法正常工作

C# 事件 : how variables are accessed

javascript - 轻松添加多层次深度 JSON

javascript - REST Node 服务器有时会运行两次代码

html - 如何避免浏览器在我的注册表中预填充字段?

python - 异常处理的范围规则是什么?