我目前正在try 在R中开发一个最小的CustomMessageHandling dashbord.我所做的只是将一条消息从R客户端发送到Javascript文件,然后在html文件中运行.错误如下:
jQuery.Deferred exception: Shiny is not defined ReferenceError: Shiny is not defined
在我的JavaScript文件中,该文件在我的中调用.html文件,我只需将其添加到文件底部,如下所示:
$(document).on('shiny:connected', function() {
console.log("Hello, I am executing!");
const clientID = "e800d12fc12c4d60960778b2bc4370af";
var urlToBase64PDF;
Shiny.addCustomMessageHandler('handler1', function()
{
doUpdate();
}
);
function base64ToArrayBuffer(base64)
{
var bin = window.atob(base64);
var len = bin.length;
var uInt8Array = new Uint8Array(len);
for (var i = 0; i < len; i++)
{
uInt8Array[i] = bin.charCodeAt(i);
}
return uInt8Array.buffer;
}
function doUpdate(message1)
{
urlToBase64PDF = message1;
}
document.write(urlToBase64PDF);
console.log(urlToBase64PDF);
document.addEventListener("adobe_dc_view_sdk.ready", function()
{
var adobeDCView = new AdobeDC.View({clientId: clientID, divId: "adobe-dc-view"});
document.write(urlToBase64PDF);
console.log(urlToBase64PDF);
adobeDCView.previewFile({content:{ promise: Promise.resolve(base64ToArrayBuffer(urlToBase64PDF))}, metaData:{fileName: "check.pdf"}},
{});
});
});
在我的.html文件,我用以下方式调用它:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1"/>
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript" src="index.js"></script>
</head>
其余功能内置于Shiny in R中,这是非常简单的UI和服务器部分:
app_ui <- function() {
shiny::addResourcePath(
'www', system.file('app/www', package = 'test')
)
tags$iframe(src="www/index.html", height = 600, width = 600)
最后是服务器部分:
app_server <- function(input, output, session){
shinyjs::useShinyjs()
message1 = "test"
session$sendCustomMessage("handler1", message1)
}
我已经try 了一切,到处搜索,甚至CustomMessageHandling的文档也以上述方式发送消息.然而,我仍然在控制台中看到了shiny 的未定义错误.
编辑:精确错误:
根本没有输出到控制台.