FPDF/PHPで生成されたJavaScriptをブラウザで表示してJavaScriptを実行する際に問題が発生しています。スクリプトは、印刷ダイアログまたはメッセージボックスを表示することになっています。この機能は何年も働いてきましたが、Edge/Windowsへの再送アップデートで壊れているようです。調査後、ブラウザ/ビューアに応じて動作が異なるようです。完全に更新されたWindows 10上PDF Edgeで実行されないJavaScript
調査結果:
- エッジ:PDFは、Edgeの独自のビューアで開き、印刷ダイアログがない表示され
- Firefoxを行います。PDFは、Firefox独自のビューアで開き、印刷ダイアログが表示されますが
- エクスプローラ:PDFは、デフォルトのPDFビューアで開き、印刷ダイアログはトンのための呼び出しで
同じ話を表示されます彼はメッセージボックス。
FPDF JavaScript supportの例で指定されたようなFPDFを拡張しています。
<?
require('fpdf.php');
class PDF_JavaScript extends FPDF {
// My code start
function OpenPrintDialog()
{
$this->IncludeJS("print(true);");
}
function ShowMessageMessage($text)
{
$this->IncludeJS("app.alert('$text', 3);");
}
// My code end
protected $javascript;
protected $n_js;
function IncludeJS($script, $isUTF8=false) {
if(!$isUTF8)
$script=utf8_encode($script);
$this->javascript=$script;
}
function _putjavascript() {
$this->_newobj();
$this->n_js=$this->n;
$this->_put('<<');
$this->_put('/Names [(EmbeddedJS) '.($this->n+1).' 0 R]');
$this->_put('>>');
$this->_put('endobj');
$this->_newobj();
$this->_put('<<');
$this->_put('/S /JavaScript');
$this->_put('/JS '.$this->_textstring($this->javascript));
$this->_put('>>');
$this->_put('endobj');
}
function _putresources() {
parent::_putresources();
if (!empty($this->javascript)) {
$this->_putjavascript();
}
}
function _putcatalog() {
parent::_putcatalog();
if (!empty($this->javascript)) {
$this->_put('/Names <</JavaScript '.($this->n_js).' 0 R>>');
}
}
}
$pdf = new PDF_JavaScript();
$pdf->AddPage();
$pdf->SetFont('Arial', '', 20);
$pdf->Text(90, 50, 'Print me!');
$pdf->OpenPrintDialog();
// or
//$pdf->ShowMessageMessage('Message box me!');
$pdf->Output();
?>
さまざまなブラウザ/ビューアで許可されているPDF JavaScript機能を利用することはできませんか?
ブラウザのコンソールログをチェックしましたか? – instead
@instead:F12コンソールタブについてお聞きしますか?そこでは、1つの情報(ナビゲーションが発生した)と2つの警告(DOCTYPEが予期され、前後のキャッシュが無効になっている)しか取得できません。 –