{"id":227951,"date":"2025-04-18T16:02:26","date_gmt":"2025-04-18T16:02:26","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/oow-pjax\/"},"modified":"2025-05-19T12:20:00","modified_gmt":"2025-05-19T12:20:00","slug":"oow-pjax","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/oow-pjax\/","author":21171063,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.5","stable_tag":"1.5","tested":"6.8.5","requires":"5.0","requires_php":"5.2","requires_plugins":null,"header_name":"OOW PJAX","header_author":"oowpress","header_description":"Turns a WordPress site into a PJAX (PushState + AJAX) experience without jQuery.","assets_banners_color":"080b0f","last_updated":"2025-05-19 12:20:00","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/profiles.wordpress.org\/oowpress\/","header_plugin_uri":"","header_author_uri":"https:\/\/oowcode.com","rating":0,"author_block_rating":0,"active_installs":30,"downloads":901,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"oowpress","date":"2025-04-18 16:15:21"},"1.1":{"tag":"1.1","author":"oowpress","date":"2025-04-22 11:49:25"},"1.2":{"tag":"1.2","author":"oowpress","date":"2025-04-25 09:48:45"},"1.3":{"tag":"1.3","author":"oowpress","date":"2025-04-25 15:13:38"},"1.4":{"tag":"1.4","author":"oowpress","date":"2025-04-27 00:18:52"},"1.5":{"tag":"1.5","author":"oowpress","date":"2025-05-19 12:20:00"}},"upgrade_notice":{"1.5":"<p>Upgrade to version 1.5 for robust Unicode support in inline styles, fixing <code>InvalidCharacterError<\/code> with <code>btoa<\/code>. This update, contributed by @long-dotcom, enhances compatibility with multilingual and emoji-rich sites, alongside improved style management. Recommended for all users.<\/p>","1.4":"<p>Upgrade to version 1.4 for dynamic nonce refreshing, asynchronous stylesheet management, and improved form redirect handling. This update enhances security, compatibility with dynamic styles, and debugging capabilities. Recommended for all users.<\/p>","1.3":"<p>Upgrade to version 1.3 for enhanced form handling with comment nonce support, improved redirect handling. This update boosts compatibility with comment forms, dynamic grids, and complex form submissions, with better debugging and performance. Recommended for all users.<\/p>","1.2":"<p>Upgrade to version 1.2 for the <strong>Allow Risky Inline Scripts<\/strong> option, <strong>CodeMirror<\/strong> integration for Custom JS, and improved cache management. Enhances script execution and developer experience.<\/p>","1.1":"<p>Upgrade to version 1.1 for <strong>Script Priority<\/strong>, <strong>Page-Specific Styles<\/strong>, and <strong>Advanced Script Execution<\/strong> options, plus improved security and admin interface. Highly recommended.<\/p>","1.0":"<p>Initial release with seamless navigation and advanced features for media players, portfolios, and more.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3276841,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3283243,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1","1.2","1.3","1.4","1.5"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Admin Interface<\/strong>: Explore settings with tabs for Overview, Settings, Custom JS, Support, and About, featuring a light\/dark theme toggle.","2":"<strong>Settings Configuration<\/strong>: Customize target containers, exclusions, loader styles, form handling, and script priority.","3":"<strong>Custom JS with CodeMirror<\/strong>: Edit JavaScript with syntax highlighting and a Dracula theme.","4":"<strong>Loading Overlay<\/strong>: Preview the customizable loader during transitions.","5":"<strong>Persistent Media Player<\/strong>: Example of a sticky audio player staying active during navigation."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[6031,47818,241032,49364,241033],"plugin_category":[],"plugin_contributors":[233185],"plugin_business_model":[],"class_list":["post-227951","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax-navigation","plugin_tags-page-transition","plugin_tags-persistent-player","plugin_tags-pjax","plugin_tags-vanilla-javascript","plugin_contributors-oowpress","plugin_committers-oowpress"],"banners":{"banner":"https:\/\/ps.w.org\/oow-pjax\/assets\/banner-772x250.png?rev=3283243","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/oow-pjax\/assets\/icon-256x256.png?rev=3276841","icon_2x":"https:\/\/ps.w.org\/oow-pjax\/assets\/icon-256x256.png?rev=3276841","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>OOW PJAX<\/strong>, brought to you by <strong>OOWCODE<\/strong> and <strong>OOWPRESS<\/strong>, revolutionizes WordPress navigation with <strong>PJAX (PushState + AJAX)<\/strong>, delivering lightning-fast page transitions without full page reloads. Built with <strong>pure JavaScript<\/strong> (no jQuery), this lightweight plugin ensures a modern, fluid user experience while remaining compatible with any WordPress theme. Whether you\u2019re running a portfolio, a blog with a persistent media player, or a dynamic content site, OOW PJAX enhances navigation, boosts engagement, and reduces server load.<\/p>\n\n<h3>Why OOW PJAX Stands Out<\/h3>\n\n<p>OOW PJAX is designed for WordPress sites that demand <strong>seamless navigation<\/strong> and <strong>dynamic content updates<\/strong>. Unlike generic performance plugins, it targets specific use cases where fluid transitions are critical, such as:<\/p>\n\n<ul>\n<li><strong>Sites with Persistent Media Players<\/strong>: Keep audio or video players (e.g., music, podcasts, live streams) running in the footer or sidebar during navigation, avoiding interruptions.<\/li>\n<li><strong>Portfolio Websites<\/strong>: Showcase projects with smooth, app-like transitions, perfect for photographers, designers, or agencies.<\/li>\n<li><strong>Dynamic Content Sites<\/strong>: Blogs, magazines, or news sites with frequently updated content benefit from fast, cached page loads.<\/li>\n<li><strong>E-commerce Stores<\/strong>: Enhance product browsing with quick transitions, keeping users engaged without reload delays.<\/li>\n<li><strong>Single-Page App (SPA) Experiences<\/strong>: Create a near-SPA feel for membership sites, directories, or dashboards without heavy frameworks.<\/li>\n<li><strong>Interactive Landing Pages<\/strong>: Deliver immersive experiences for marketing campaigns or event sites with uninterrupted navigation.<\/li>\n<\/ul>\n\n<p>Version 1.5 introduces a critical fix for handling Unicode characters (e.g., Chinese, emojis) in inline styles, preventing <code>InvalidCharacterError<\/code> issues with <code>btoa<\/code>. This update, contributed by <strong>@long-dotcom<\/strong>, ensures robust style management for multilingual and emoji-rich sites. It also enhances security with dynamic nonce refreshing, improves asynchronous stylesheet handling, and refines form redirect handling, making OOW PJAX more reliable for complex WordPress sites.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li><strong>Seamless AJAX Navigation<\/strong>: Loads content via AJAX, updating specific containers without reloading the entire page.<\/li>\n<li><strong>Persistent Elements<\/strong>: Keeps fixed elements (e.g., media players, sticky menus, chat widgets) intact during transitions.<\/li>\n<li><strong>Browser History Support<\/strong>: Syncs URLs with the History API for natural forward\/back navigation.<\/li>\n<li><strong>Customizable Loader<\/strong>: Style the loading overlay with CSS to match your brand (e.g., spinner, progress bar).<\/li>\n<li><strong>Content Caching<\/strong>: Stores pages locally for instant repeat visits, with adjustable cache lifetime and user-aware logic.<\/li>\n<li><strong>Advanced Form Handling<\/strong>: Submits forms (e.g., comments, login, contact) via AJAX, with explicit nonce support and redirect handling (301, 302, 303, 307, 308).<\/li>\n<li><strong>Dynamic Nonce Refresh<\/strong>: Automatically refreshes security nonces via AJAX for enhanced security and reliability.<\/li>\n<li><strong>Lightweight &amp; jQuery-Free<\/strong>: Built with vanilla JavaScript for minimal footprint and maximum performance.<\/li>\n<li><strong>Flexible Configuration<\/strong>: Define target containers, exclude links\/zones (e.g., <code>.no-pjax<\/code>, <code>#wpadminbar<\/code>), and add custom JS before\/after navigation.<\/li>\n<li><strong>Debug Mode<\/strong>: Logs detailed information in the browser console and server logs for easy troubleshooting.<\/li>\n<li><strong>Secure Implementation<\/strong>: Uses dynamic nonces, sanitization, and strict validation for all settings and AJAX requests.<\/li>\n<li><strong>Script Priority Control<\/strong>: Customize the loading order of <code>oow-pjax.js<\/code> in the footer for compatibility.<\/li>\n<li><strong>Dynamic Style Management<\/strong>: Injects and manages page-specific stylesheets and inline styles asynchronously, now with Unicode support.<\/li>\n<li><strong>Advanced Script Execution<\/strong>: Re-executes scripts in updated containers or footer, with control over inline scripts and validation.<\/li>\n<li><strong>CodeMirror Integration<\/strong>: Edit Custom JS with syntax highlighting and a Dracula theme.<\/li>\n<li><strong>Unicode Support for Styles<\/strong>: Safely handles non-Latin1 characters (e.g., Chinese, emojis) in inline styles without errors (new in 1.5).<\/li>\n<\/ul>\n\n<h3>Who Needs OOW PJAX?<\/h3>\n\n<p>OOW PJAX is tailored for WordPress users who want to elevate their site\u2019s navigation and user experience. Specific use cases include:<\/p>\n\n<ul>\n<li><strong>Music &amp; Podcast Sites<\/strong>: Ensure uninterrupted playback of audio players during browsing.<\/li>\n<li><strong>Video Platforms<\/strong>: Maintain video playback (e.g., tutorials, live streams) across navigation.<\/li>\n<li><strong>Creative Portfolios<\/strong>: Deliver smooth transitions between project pages for artists or agencies.<\/li>\n<li><strong>Content-Heavy Blogs<\/strong>: Speed up navigation with caching for frequently visited pages.<\/li>\n<li><strong>E-commerce with Sticky Features<\/strong>: Keep cart widgets or live chat persistent during browsing.<\/li>\n<li><strong>Membership Sites<\/strong>: Create fluid navigation for dashboards or course platforms.<\/li>\n<li><strong>Marketing Campaigns<\/strong>: Build immersive landing pages with fast transitions.<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li><strong>Link Interception<\/strong>: Captures clicks on internal links, skipping external links, <code>target=\"_blank\"<\/code>, excluded selectors (e.g., <code>.no-pjax<\/code>), or excluded zones (e.g., <code>#wpadminbar<\/code>).<\/li>\n<li><strong>AJAX Content Loading<\/strong>: Fetches new content via AJAX and updates specified containers (e.g., <code>#main<\/code>, <code>.content<\/code>).<\/li>\n<li><strong>URL Synchronization<\/strong>: Updates the browser\u2019s URL using the History API for seamless navigation.<\/li>\n<li><strong>Persistent Elements<\/strong>: Preserves fixed elements (e.g., media players, sticky headers) across transitions.<\/li>\n<li><strong>Customizable Loader<\/strong>: Displays a styled overlay during content loading, with configurable minimum duration.<\/li>\n<li><strong>Caching<\/strong>: Caches pages for instant repeat visits (disabled for logged-in users) with adjustable lifetime.<\/li>\n<li><strong>Form Handling<\/strong>: Submits forms via AJAX, supporting explicit comment nonces and server-side redirects (e.g., 301, 302).<\/li>\n<li><strong>Script Management<\/strong>: Re-executes scripts in updated containers or footer, with custom JS execution before\/after navigation.<\/li>\n<li><strong>Style Injection<\/strong>: Asynchronously injects page-specific stylesheets and inline styles, now with robust Unicode support.<\/li>\n<\/ol>\n\n<h3>Getting Started<\/h3>\n\n<p>Install OOW PJAX, configure it in minutes, and transform your site\u2019s navigation:\n1. Install and activate the plugin from the WordPress admin.\n2. Go to <strong>OOWCODE &gt; OOW PJAX<\/strong> in the WordPress admin panel.\n3. In the <strong>Settings<\/strong> tab, enable PJAX and configure:\n   - <strong>Target Containers<\/strong>: CSS selectors for content updates (e.g., <code>#main<\/code>).\n   - <strong>Exclude Selectors\/Zones<\/strong>: Links or zones to skip (e.g., <code>.no-pjax<\/code>, <code>#wpadminbar<\/code>).\n   - <strong>Loader CSS<\/strong>: Customize the loading animation.\n   - <strong>Cache Settings<\/strong>: Enable caching with a lifetime (e.g., 300 seconds).\n   - <strong>Form Handling<\/strong>: Enable AJAX for forms and specify refresh containers (e.g., <code>#comments<\/code>).\n   - <strong>Script Priority<\/strong>: Set a high value (e.g., 9999) to load <code>oow-pjax.js<\/code> late.\n   - <strong>Custom JS<\/strong>: Add JavaScript before\/after navigation using CodeMirror.\n4. Save settings and test navigation on your site.\n5. Check the <strong>Overview<\/strong> tab for tips or the <strong>Support<\/strong> tab for help.<\/p>\n\n<h3>Live Demo<\/h3>\n\n<p>See OOW PJAX in action! Visit our <a href=\"https:\/\/demo.oowcode.com\/oow-pjax\/\">live demo<\/a> to experience seamless transitions, a persistent media player, and portfolio navigation on a real WordPress site.<\/p>\n\n<h3>Why Choose OOW PJAX?<\/h3>\n\n<ul>\n<li><strong>Targeted Use Cases<\/strong>: Perfect for sites with persistent media, portfolios, or dynamic content.<\/li>\n<li><strong>SEO-Friendly<\/strong>: Maintains proper URLs and browser history for search engine compatibility.<\/li>\n<li><strong>Theme-Agnostic<\/strong>: Works with any WordPress theme by targeting custom containers.<\/li>\n<li><strong>Lightweight Design<\/strong>: No jQuery, minimal code, and optimized performance.<\/li>\n<\/ul>\n\n<p>Discover the power of seamless navigation with OOW PJAX by <strong>OOWCODE<\/strong> and <strong>OOWPRESS<\/strong>. Visit <a href=\"https:\/\/oowcode.com\/oow-pjax\">oowcode.com\/oow-pjax<\/a> for full documentation.<\/p>\n\n<h3>Support<\/h3>\n\n<p>Need help? Visit the <strong>Support<\/strong> tab in the plugin settings or email <a href=\"mailto:&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6f;&#x6f;&#x77;&#x70;&#x72;&#x65;&#x73;&#x73;&#x2e;&#x63;&#x6f;&#x6d;\">support@oowpress.com<\/a>. Full documentation is available at <a href=\"https:\/\/oowcode.com\/oow-pjax\">oowcode.com\/oow-pjax<\/a>.<\/p>\n\n<h3>Contribute<\/h3>\n\n<p>Contribute to OOW PJAX on <a href=\"https:\/\/github.com\/oowcode\/oow-pjax\">GitHub<\/a> or share feedback at <a href=\"https:\/\/oowcode.com\">oowcode.com<\/a>.<\/p>\n\n<h3>License<\/h3>\n\n<p>OOW PJAX is licensed under the GPLv2 or later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>oow-pjax<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>OOWCODE &gt; OOW PJAX<\/strong> in the admin panel.<\/li>\n<li>Configure settings in the <strong>Settings<\/strong> tab (e.g., target containers, exclusions, loader styles, form handling).<\/li>\n<li>Enable PJAX and save changes to start using seamless navigation.<\/li>\n<li>(Optional) Read the <strong>Overview<\/strong> tab for setup tips or contact support via the <strong>Support<\/strong> tab.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='what%20is%20pjax%2C%20and%20why%20use%20it%3F'><h3>What is PJAX, and why use it?<\/h3><\/dt>\n<dd><p>PJAX (PushState + AJAX) loads content dynamically via AJAX while updating the browser\u2019s URL. OOW PJAX uses this to create fast, app-like navigation, ideal for sites with persistent media players or dynamic content.<\/p><\/dd>\n<dt id='can%20i%20use%20oow%20pjax%20with%20a%20persistent%20media%20player%3F'><h3>Can I use OOW PJAX with a persistent media player?<\/h3><\/dt>\n<dd><p>Yes! OOW PJAX is perfect for audio or video players. Exclude player controls (e.g., <code>.player-controls<\/code>) in <strong>Exclude Selectors<\/strong> or zones (e.g., <code>.player<\/code>) in <strong>Exclude Selectors Zone<\/strong> to keep them persistent.<\/p><\/dd>\n<dt id='will%20it%20work%20with%20my%20wordpress%20theme%3F'><h3>Will it work with my WordPress theme?<\/h3><\/dt>\n<dd><p>Yes. Specify your theme\u2019s content container (e.g., <code>#main<\/code>, <code>.content<\/code>) in <strong>Target Containers<\/strong>. Check your theme\u2019s source code for the correct selector.<\/p><\/dd>\n<dt id='does%20it%20support%20ajax%20form%20submissions%3F'><h3>Does it support AJAX form submissions?<\/h3><\/dt>\n<dd><p>Yes, enable <strong>Enable Form Handling<\/strong> to submit forms (e.g., comments, login, contact) via AJAX. Version 1.5 enhances this with explicit comment nonce support, dynamic nonce refreshing, and robust redirect handling (e.g., 301, 302).<\/p><\/dd>\n<dt id='how%20do%20i%20style%20the%20loading%20animation%3F'><h3>How do I style the loading animation?<\/h3><\/dt>\n<dd><p>Edit <strong>Loader CSS<\/strong> in the <strong>Settings<\/strong> tab to customize the loading overlay. Use <strong>Reset to Default<\/strong> to revert to the default spinner.<\/p><\/dd>\n<dt id='can%20i%20exclude%20specific%20links%20or%20zones%20from%20pjax%3F'><h3>Can I exclude specific links or zones from PJAX?<\/h3><\/dt>\n<dd><p>Yes, use <strong>Exclude Selectors<\/strong> (e.g., <code>.no-pjax<\/code>) for links or <strong>Exclude Selectors Zone<\/strong> (e.g., <code>.footer<\/code>) for entire zones. Enable <strong>Exclude External Links<\/strong> and <strong>Exclude Links with target=\"_blank\"<\/strong> for automatic exclusions.<\/p><\/dd>\n<dt id='is%20oow%20pjax%20compatible%20with%20caching%20plugins%3F'><h3>Is OOW PJAX compatible with caching plugins?<\/h3><\/dt>\n<dd><p>Yes, it works with WP Rocket, W3 Total Cache, and others. Enable <strong>Cache<\/strong> and set <strong>Cache Lifetime<\/strong> to balance speed and freshness.<\/p><\/dd>\n<dt id='how%20do%20i%20troubleshoot%20issues%3F'><h3>How do I troubleshoot issues?<\/h3><\/dt>\n<dd><p>Enable <strong>Debug Mode<\/strong> to view detailed console and server logs (F12 or check server logs). Check the <strong>Overview<\/strong> tab for troubleshooting tips or contact <a href=\"mailto:&#x73;&#x75;&#x70;&#x70;&#x6f;&#x72;&#x74;&#x40;&#x6f;&#x6f;&#x77;&#x70;&#x72;&#x65;&#x73;&#x73;&#x2e;&#x63;&#x6f;&#x6d;\">support@oowpress.com<\/a>.<\/p><\/dd>\n<dt id='does%20it%20require%20jquery%3F'><h3>Does it require jQuery?<\/h3><\/dt>\n<dd><p>No, OOW PJAX uses vanilla JavaScript for a lightweight, modern approach.<\/p><\/dd>\n<dt id='can%20i%20add%20custom%20javascript%3F'><h3>Can I add custom JavaScript?<\/h3><\/dt>\n<dd><p>Yes, use the <strong>Custom JS<\/strong> tab to add JavaScript before or after PJAX navigation with CodeMirror\u2019s syntax highlighting.<\/p><\/dd>\n<dt id='how%20does%20version%201.5%20improve%20style%20handling%3F'><h3>How does version 1.5 improve style handling?<\/h3><\/dt>\n<dd><p>Version 1.5 adds support for Unicode characters (e.g., Chinese, emojis) in inline styles, fixing <code>InvalidCharacterError<\/code> issues with <code>btoa<\/code>. Thanks to @long-dotcom for the contribution.<\/p><\/dd>\n<dt id='how%20does%20oow%20pjax%20handle%20page-specific%20styles%3F'><h3>How does OOW PJAX handle page-specific styles?<\/h3><\/dt>\n<dd><p>Version 1.5 enhances asynchronous stylesheet management, extracting and applying <code>&lt;link&gt;<\/code> and <code>&lt;style&gt;<\/code> tags during PJAX transitions, with full Unicode support for consistent rendering.<\/p><\/dd>\n<dt id='why%20are%20nonces%20refreshed%20dynamically%3F'><h3>Why are nonces refreshed dynamically?<\/h3><\/dt>\n<dd><p>Dynamic nonce refreshing prevents errors from expired nonces during long sessions or high-traffic scenarios, enhancing security and reliability for AJAX requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5<\/h4>\n\n<ul>\n<li><strong>Fixed<\/strong>: <code>InvalidCharacterError<\/code> in <code>btoa<\/code> when handling Unicode characters (e.g., Chinese, emojis) in inline styles by adding <code>safeBase64Encode<\/code> function. Credits to @long-dotcom for identifying the issue and suggesting a solution.<\/li>\n<li><strong>Improved<\/strong>: Enhanced <code>applyStylesheetsAsync<\/code> to use <code>safeBase64Encode<\/code> for robust style management with non-Latin1 characters.<\/li>\n<li><strong>Fixed<\/strong>: Minor JSDoc typo in <code>isCacheValid<\/code> for improved documentation clarity.<\/li>\n<\/ul>\n\n<h4>1.4<\/h4>\n\n<ul>\n<li><strong>Added<\/strong>: Dynamic nonce refreshing via AJAX (<code>refreshNonce<\/code> and <code>refresh_nonce<\/code>) for enhanced security and reliability.<\/li>\n<li><strong>Added<\/strong>: Asynchronous stylesheet management (<code>extractStylesheets<\/code> and <code>applyStylesheetsAsync<\/code>) for page-specific <code>&lt;link&gt;<\/code> and <code>&lt;style&gt;<\/code> tags.<\/li>\n<li><strong>Improved<\/strong>: Form submission redirect handling with automatic follow-up GET requests for 301, 302, 303, 307, and 308 responses.<\/li>\n<li><strong>Improved<\/strong>: Server-side script validation in <code>load_content<\/code> and <code>handle_form_submit<\/code> to prevent execution of invalid scripts.<\/li>\n<li><strong>Improved<\/strong>: Detailed server-side error logging (<code>error_log<\/code>) for AJAX requests and redirects to facilitate debugging.<\/li>\n<li><strong>Improved<\/strong>: Cache management to include stylesheets, ensuring consistent rendering during cached page loads.<\/li>\n<li><strong>Improved<\/strong>: Admin interface with critical styles (<code>&lt;link rel=\"preload\"&gt;<\/code>) for faster font loading.<\/li>\n<li><strong>Fixed<\/strong>: Potential issues with duplicate stylesheets by checking for existing <code>&lt;link&gt;<\/code> and <code>&lt;style&gt;<\/code> tags.<\/li>\n<\/ul>\n\n<h4>1.3<\/h4>\n\n<ul>\n<li><strong>Added<\/strong>: Enhanced redirect handling for form submissions, supporting 301, 302, 303, 307, and 308 responses with automatic follow-up GET requests.<\/li>\n<li><strong>Added<\/strong>: Form refresh targets (<code>oow_pjax_form_refresh_targets<\/code>) to update additional containers (e.g., <code>#comments<\/code>) after form submissions.<\/li>\n<li><strong>Improved<\/strong>: Form submission logic with serialized form data and explicit nonce handling for better security and compatibility.<\/li>\n<li><strong>Improved<\/strong>: Redirect detection in <code>handle_form_submit<\/code> with detailed logging for debugging (HTTP status, headers, body).<\/li>\n<li><strong>Improved<\/strong>: Cache management with timestamp validation and user-aware logic (disabled for logged-in users).<\/li>\n<li><strong>Improved<\/strong>: JavaScript code organization with detailed JSDoc comments for better readability and maintainability.<\/li>\n<li><strong>Improved<\/strong>: Error logging in PHP and JavaScript for easier troubleshooting of AJAX requests and script execution.<\/li>\n<li><strong>Fixed<\/strong>: Potential issues with script re-execution by ensuring proper replacement of script nodes.<\/li>\n<li><strong>Fixed<\/strong>: Minor bugs in form submission handling for edge cases with missing nonces or invalid redirects.<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li><strong>Added<\/strong>: <strong>Allow Risky Inline Scripts<\/strong> option to enable execution of inline scripts with <code>addEventListener<\/code> or <code>window.location<\/code> (use with caution).<\/li>\n<li><strong>Added<\/strong>: <strong>CodeMirror<\/strong> integration for <strong>Custom JS Before<\/strong> and <strong>Custom JS After<\/strong> fields with syntax highlighting and Dracula theme.<\/li>\n<li><strong>Added<\/strong>: Maximum cache size limit (<code>MAX_CACHE_SIZE = 50<\/code>) to optimize memory usage.<\/li>\n<li><strong>Improved<\/strong>: Inline script validation with <code>isValidScriptContent<\/code> to prevent execution of non-JavaScript content.<\/li>\n<li><strong>Improved<\/strong>: JavaScript code structure with detailed comments and better organization.<\/li>\n<li><strong>Improved<\/strong>: Error handling for custom JavaScript execution with detailed console logging.<\/li>\n<li><strong>Improved<\/strong>: Admin interface with critical styles to prevent FOUC and enhanced CodeMirror usability.<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li><strong>Added<\/strong>: <strong>Script Priority<\/strong> setting to control <code>oow-pjax.js<\/code> loading order in the footer (default: 9999).<\/li>\n<li><strong>Added<\/strong>: <strong>Page-Specific Styles<\/strong> option to inject stylesheets and inline styles during PJAX transitions.<\/li>\n<li><strong>Added<\/strong>: <strong>Script Re-execution<\/strong> options for targets, footer, and inline scripts.<\/li>\n<li><strong>Added<\/strong>: Dynamic notices in the admin interface for improved feedback.<\/li>\n<li><strong>Improved<\/strong>: JavaScript comments standardized to English with <code>\/* *\/<\/code> format.<\/li>\n<li><strong>Improved<\/strong>: JavaScript initialization with <code>document.readyState<\/code> check for late script loading.<\/li>\n<li><strong>Improved<\/strong>: Inline script validation to prevent non-JavaScript content execution.<\/li>\n<li><strong>Improved<\/strong>: Cache management with user-aware logic and validity checks.<\/li>\n<li><strong>Improved<\/strong>: Form handling with support for server-side redirects via <code>Location<\/code> header.<\/li>\n<li><strong>Improved<\/strong>: Security with strict script validation, <code>wp_unslash<\/code>, and <code>esc_url_raw<\/code> in AJAX requests.<\/li>\n<li><strong>Improved<\/strong>: Admin theme toggle with AJAX saving and UI responsiveness.<\/li>\n<li><strong>Improved<\/strong>: Documentation with detailed setting descriptions and internal code comments.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release with seamless PJAX navigation, persistent element support, customizable loader, content caching, AJAX form handling, and debug mode.<\/li>\n<\/ul>","raw_excerpt":"Transform your WordPress site into a fast, seamless PJAX (PushState + AJAX) experience without jQuery.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/227951","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=227951"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/oowpress"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=227951"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=227951"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=227951"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=227951"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=227951"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=227951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}